Python:多线程无法运行

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)

当我执行以上代码时,什么也没发生。我的方法正确吗?我想念什么?

Fre*_*rik 5

在启动线程之前,您正在队列上调用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))