在Mac上完成多处理时挂起,但不在Windows上挂起

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Mac上完成多处理时挂起,但不在Windows上挂起相关的知识,希望对你有一定的参考价值。

我有两个开发环境......一台Windows计算机和一台Mac用于旅途中。该脚本在Windows计算机上运行正常,并将循环遍历所有池。但在Mac上,它只是挂起。但是,当我手动将进程计数设置为1时,它确实有效。

这挂起......

def insert_user_request(self, data):
    pool_size = multiprocessing.cpu_count() * 2
    pool = multiprocessing.Pool(processes=pool_size)
    pool.map(self.insert_user, data)

这有效......

def insert_user_request(self, data):
    pool_size = 1
    pool = multiprocessing.Pool(processes=pool_size)
    pool.map(self.insert_user, data)

池调用的函数将数据插入数据库,果然,数据也很好。因此,这似乎是问题的“关闭”池。

答案

在原始问题的评论中归功于Antti Haapala,但是spawn start方法起作用了。

def insert_user_request(self, data):
    multiprocessing.set_start_method('spawn')
    pool_size = multiprocessing.cpu_count() * 2
    pool = multiprocessing.Pool(processes=pool_size)
    pool.map(self.insert_user, data)

以上是关于在Mac上完成多处理时挂起,但不在Windows上挂起的主要内容,如果未能解决你的问题,请参考以下文章

托管在 Windows 服务中的 WCF 服务在停止时挂起

独立的 Windows 应用程序在焦点更改时挂起

Xamarin.Mac 应用程序在与最终用户的文件系统交互时挂起

Python多处理池在加入时挂起?

Composer 在更新依赖项时挂起

Jenkins 从 Git 获取代码时挂起