【问题标题】:passing user input from main to inside a pool python将用户输入从 main 传递到池 python 内部
【发布时间】:2021-02-19 14:35:33
【问题描述】:

我正在尝试将一些用户输入从 main 或外部 main 传递给在多处理池中运行的函数。代码如下:

import multiprocessing

global var1
var1 = input("enter input: ")

def function1(arg1_A):
    x = var1 + 'string'
    do stuff

def MCprocess():
    pool = multiprocessing.Pool(4)
    pool.map(function1, listarg1)

if __name__ == '__main__':
    MCprocess()

我应该把 input() 函数放在哪里,以便 function1 的所有实例都能接收到它?有更好的方法吗?

澄清一下。我尝试在函数中将 var1 声明为全局 var1。这没有奏效。

【问题讨论】:

  • modules 模块有什么作用,arg1 是什么?你也能说出“那没有用”是什么意思吗?也是multiprocessing 可以依赖于操作系统,你关心哪个操作系统。见stackoverflow.com/help/mcve
  • @SamMason 多处理是一个 python 模块。你需要一个 import 语句来导入它。我更新了代码以显示我正在导入该模块。我正在进口其他人。感谢您指出 arg1。我也更新了。在 MCprocess 中,listarg1 是要处理的文件列表。在 function1 中,arg1_A 是属于该列表的个人(任何个人)。
  • 道歉。错过了操作系统的请求。 Windows10。
  • 我没有在 Windows 下测试我的答案,但我希望它可以工作
  • 我做到了。有用。接受了你的回答。感谢您的帮助。

标签: python windows multiprocessing


【解决方案1】:

使这项工作可移植(即在 Windows 下)有点繁琐,但这应该做正确的事情:

from multiprocessing import Pool

def init(*args):
   global var1
   [var1] = args

def process(path):
    print(repr(var1), 'processing', path)

def MCprocess():
    var1 = input("enter input: ")
    with Pool(initializer=init, initargs=[var1]) as pool:
        pool.map(process, ['first', 'second'])

if __name__ == '__main__':
    MCprocess()

请注意,如果您只关心 Linux 或 OSX(即它在哪里 forks 进程),您可以侥幸逃脱:

from multiprocessing import Pool

def process(path):
    print(repr(var1), 'processing', path)

var1 = input("enter input: ")
with Pool() as pool:
    pool.map(process, ['first', 'second'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 2021-06-21
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多