python多核运行程序_在多核上运行Python

要先回答第二个问题,“Finished”被打印到终端,因为a = input("Finished")在if __name__ == '__main__':代码块之外。因此,它是一个模块级常量,在模块首次加载时分配,并在模块中的任何代码运行之前执行。

要回答第一个问题,您只创建了一个运行的进程,然后在继续之前等待完成。这给您带来了多处理的零好处,并增加了创建新进程的开销。

因为要创建多个进程,所以需要通过某种集合(例如python列表)创建一个池,然后启动所有进程。

实际上,您需要关心的不仅仅是处理器的数量(例如可用内存的数量、重新启动崩溃的工作线程的能力等)。不过,这里有一个简单的例子,可以完成上面的任务。import datetime as dt

from multiprocessing import Process, current_process

import sys

def f(name):

print('{}: hello {} from {}'.format(

dt.datetime.now(), name, current_process().name))

sys.stdout.flush()

if __name__ == '__main__':

worker_count = 8

worker_pool = []

for _ in range(worker_count):

p = Process(target=f, args=('bob',))

p.start()

worker_pool.append(p)

for p in worker_pool:

p.join() # Wait for all of the workers to finish.

# Allow time to view results before program terminates.

a = input("Finished") # raw_input(...) in Python 2.

还请注意,如果在启动工人后立即加入工人,则在启动下一个工人之前,您将等待每个工人完成其任务。这通常是不可取的,除非任务的顺序必须是连续的。

通常错误worker_1.start()

worker_1.join()

worker_2.start() # Must wait for worker_1 to complete before starting worker_2.

worker_2.join()

通常需要worker_1.start()

worker_2.start() # Start all workers.

worker_1.join()

worker_2.join() # Wait for all workers to finish.

有关详细信息,请参阅以下链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值