我正在尝试在 python 中运行一些多线程代码
from Queue import Queue
q = Queue()
doclist=["adsas","asdasd","oipoipo"]
for i,doc in enumerate(doclist):
q.put(doc)
q.join()
threadRun.run(50, qWorker.worker(q))
首先,我创建一个队列并向其中添加一些内容。然后,我调用一个创建和运行线程的方法。这是threadRun.run方法
import threading
def run(numThreads,targetMethod):
print "Running threads"
for i in range(numThreads):
t = threading.Thread(target=targetMethod)
t.daemon=True
t.start()
这里是qWorker.worker方法
def worker(qItem):
print "Q Worker"
while True:
doc = qItem.get()
try:
print doc
qItem.task_done()
except:
print "Error"
当我执行上面的代码时,没有任何反应。我的方法正确吗?我错过了什么?
请您参考如下方法:
您在启动线程之前在队列上调用 join,因此您的代码将阻塞在那里。
所以启动线程然后运行q.join()
编辑
另一个错误是队列的传递,这个:
threadRun.run(50, qWorker.worker(q))
应该是:
threadRun.run(50, qWorker.worker, q)
因此,将队列作为参数添加到运行函数中,并在创建线程时执行以下操作:
t = threading.Thread(target=targetMethod, args=(q,))
您看到“Q worker”输出的原因是因为您实际上在这里调用了 worker 函数:threadRun.run(50, qWorker.worker(q))
