小编FSc*_*Sch的帖子

Python 并发 future ProcessPoolExecutor 和全局变量:在 Linux 上工作,在 MacOS 上出错

下面的代码示例按照我的想法在两台 Linux 机器上运行:在运行 Red Hat 4.8.5-39 内核的基于 CentOS 的大型服务器上使用 Python 3.6.8,在运行 Red Hat 4.8.5-39 内核的基于 MX 的机器上使用 Python 3.7.3 Debian 8.3.0-6 内核)。

$ python3 testshared.py filename.dat
filename.dat
270623586670000.0
Run Code Online (Sandbox Code Playgroud)

但是,在运行 Mojave 10.14.6 的 Mac 上,使用 Python 3.8.3,我收到错误,因为foo=[]在 function 中processBigFatRow()。注意是在启动进程池之前foo分配的。就像在 Linux 中一样,分配的版本被传递给进程,而在 Mac 上,进程只使用代码顶部的初始化(我必须将其放在那里,以便它们是可变的)。getBigFatData() foogetBigFatData()global

我知道该进程是主进程的“独立副本”,并且您不能在一个进程中分配全局变量并期望它们在另一个进程中发生更改。但是,在并行进程启动之前已经设置并且仅通过引用使用的变量又如何呢?这就像跨操作系统的进程副本并不相同。哪一个正在“按设计”工作?

代码示例:

import pylab as pl
from concurrent import futures
import sys

foo = []
bar = []

def getBigFatData(filename):
    
    global foo, bar
    # get the big …
Run Code Online (Sandbox Code Playgroud)

python linux macos global-variables concurrent.futures

7
推荐指数
2
解决办法
3678
查看次数