Skip to main content
 首页 » 编程设计

Python:多线程不运行

2025年05月04日27EasonJim

我正在尝试在 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))