【发布时间】:2017-07-16 14:50:30
【问题描述】:
当我试图让我的脚本多线程时,
我发现了多处理,
我想知道是否有办法让多处理与线程一起工作?
- cpu 1 -> 3 个线程(worker A,B,C)
- cpu 2 -> 3 个线程(worker D,E,F)
- ...
我想自己做,但遇到了很多问题。
有没有办法让这两者一起工作?
【问题讨论】:
标签: python python-3.x web-crawler
当我试图让我的脚本多线程时,
我发现了多处理,
我想知道是否有办法让多处理与线程一起工作?
我想自己做,但遇到了很多问题。
有没有办法让这两者一起工作?
【问题讨论】:
标签: python python-3.x web-crawler
您可以生成多个Processes,然后从其中生成Threads。每个进程几乎可以处理标准解释器线程可以处理的任何事情,因此没有什么能阻止您在每个进程中创建新线程甚至新进程。举个小例子:
def foo():
print("Thread Executing!")
def bar():
threads = []
for _ in range(3): # each Process creates a number of new Threads
thread = threading.Thread(target=foo)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
if __name__ == "__main__":
processes = []
for _ in range(3):
p = multiprocessing.Process(target=bar) # create a new Process
p.start()
processes.append(p)
for process in processes:
process.join()
线程之间的通信可以在每个Process 中处理,进程之间的通信可以使用队列或管理器对象在根解释器级别处理。
【讨论】:
lock.acquire 和lock.release 语句,以防止同时写入输出流。
您可以定义一个function,它采用process 并使其运行3 个threads,然后生成您的进程来定位此function,例如:
def threader(process):
for _ in range(3):
threading.Thread(target=yourfunc).start()
def main():
# spawn whatever processes here to target threader
【讨论】: