Python 将变量传递给多处理池

标签 python variables multiprocessing global pool

我多年来一直试图弄清楚这一点,但想知道是否有人知道如何将 s 变量传递到池中而不将其作为参数?

import ctypes
import multiprocessing as mp
import os

def worker1(n):
    k = n*3
    print(k)
    print(s)
    # print(ctypes_int.value)

if __name__ == '__main__':
    # global s
    somelist = [1,2,3]

    # ctypes_int = mp.Value(ctypes.c_wchar_p , "hi")
    s = "TESTING"
    # worker1(1)
    p = mp.Pool(1)
    p.map(worker1,somelist)

这是我收到的错误:

3
6
9
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
  File "C:\Program Files\Python\Python37\lib\multiprocessing\pool.py", line 121, in worker
    result = (True, func(*args, **kwds))
  File "C:\Program Files\Python\Python37\lib\multiprocessing\pool.py", line 44, in mapstar
    return list(map(*args))
  File "C:\Users\light\AppData\Local\Temp\tempCodeRunnerFile.python", line 10, in worker1
    print(s)
NameError: name 's' is not defined
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\light\AppData\Local\Temp\tempCodeRunnerFile.python", line 21, in <module>
    p.map(worker1,somelist)
  File "C:\Program Files\Python\Python37\lib\multiprocessing\pool.py", line 268, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "C:\Program Files\Python\Python37\lib\multiprocessing\pool.py", line 657, in get
    raise self._value
NameError: name 's' is not defined

最佳答案

您可以将变量与 somelist 中的每个项目一起传递:

import multiprocessing as mp

def worker1(p):
    n,s = p
    k = n*3
    print(k)
    print(s)

if __name__ == '__main__':
    somelist = [1,2,3]

    s = "TESTING"
    p = mp.Pool(1)
    p.map(worker1,[(n,s) for n in somelist])

参数(n,s)作为p传递,我将其解压到n,s中。

关于Python 将变量传递给多处理池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65575402/

相关文章:

Python argparse 以不同的方式处理参数

python - 将不可迭代变量传递给使用 map() 评估的函数

python - 在 Ubuntu 上运行 GAE dev_appserver.py 时出错

php 变量已声明,但不会插入数据库

python - Python 多处理的输出队列提供的结果比预期多

python - 我需要在 waitress 提供的 Flask api 中使用多重处理,如何实现?

python - 如何加快 PostgreSQL 中的更新/替换操作?

c++ - 将临时变量写入自己的新变量是否更好?

javascript - 在 JavaScript 代码中使用 PHP 变量

python - pickle 错误 : Can't pickle <type 'function' >