看起来是典型的生产者-消费者问题import threading
import os
commands = ['ping www.google.com', 'ping www.yahoo.com', 'ping www.hotmail.com']
def worker_func():
while commands: # Checks if the the list is not-empty. Loop exits when list is becomes empty
com = commands.pop(0)
print "Start execute commands.."
os.system(com)
count += 1
print "[OK] command "+str(count)+" runing successfully."
workers = [threading.Thread(target=worker_func, args=tuple(), name='thread_'+str(i)) for i in range(5) ] # Create 5 workers (consumers)
[worker.start() for worker in workers] # Start working
[worker.join() for worker in workers] # Wait for all workers to finish
这里我创建了5个工作线程。这些线程将运行函数worker_func。
worker_func将从列表中选取一个元素并执行该作业。当list变为空时,函数返回(退出)。在
注意:阅读Global Interpreter Lock以了解不应在何处使用python多线程。
在这种情况下,GIL(全局解释器锁)应该不会影响您,因为worker_func调用一个子进程并等待它完成。当线程等待时,GIL被释放到其他线程。在