Abt*_*Pst 1 python multithreading python-2.7
我正在尝试在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))
Run Code Online (Sandbox Code Playgroud)
首先,我创建一个队列并向其中添加一些内容。然后,我调用一个创建并运行线程的方法。这是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()
Run Code Online (Sandbox Code Playgroud)
这是qWorker.worker方法
def worker(qItem):
print "Q Worker"
while True:
doc = qItem.get()
try:
print doc
qItem.task_done()
except:
print "Error"
Run Code Online (Sandbox Code Playgroud)
当我执行以上代码时,什么也没发生。我的方法正确吗?我想念什么?
在启动线程之前,您正在队列上调用join,因此您的代码将在那里阻塞。
所以启动线程然后运行 q.join()
编辑
另一个错误是队列的传递,这是:
threadRun.run(50, qWorker.worker(q))
Run Code Online (Sandbox Code Playgroud)
应该:
threadRun.run(50, qWorker.worker, q)
Run Code Online (Sandbox Code Playgroud)
因此,将队列作为参数添加到运行函数,并在创建线程时执行以下操作:
t = threading.Thread(target=targetMethod, args=(q,))
Run Code Online (Sandbox Code Playgroud)
看到“ Q worker”输出的原因是因为您实际上在这里调用了worker函数: threadRun.run(50, qWorker.worker(q))