gpt4 book ai didi

python - 可调用的多处理脚本

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:18 24 4
gpt4 key购买 nike

我将使用 this question 的答案作为我的起点,因为我觉得这是一个非常简单的最小示例,但我正在寻找这个问题的一般答案。我习惯于以这种方式在 python 中进行多重处理,其中实际工作所需的所有内容都封装在 if __name__ 中。 ...这样的声明:

from multiprocessing import Pool as ThreadPool
import requests


API_URL = 'http://example.com/api'

def foo(x):
params={'x': x}
r = requests.get(API_URL, params=params)
return r.json()

if __name__ == '__main__':
pool = ThreadPool(4) # Hint...
num_iter = [1,2,3,4,5]
out = pool.map(foo, num_iter)
print(out)

现在,我希望能够创建一个函数,以便能够从另一个 python 脚本启动多处理部分。但是,一旦我用函数定义替换 if 语句(或将其封装在函数定义中)并尝试运行该函数,我就会得到 AttributeError: 'module' object has no attribute 'foo' :

from multiprocessing import Pool as ThreadPool
import requests


API_URL = 'http://example.com/api'

def foo(x):
params={'x': x}
r = requests.get(API_URL, params=params)
return r.json()

def main():
pool = ThreadPool(4) # Hint...
num_iter = [1,2,3,4,5]
out = pool.map(foo, num_iter)
print(out)

所以我的问题是,如何正确封装多处理,以便可以方便地从另一个模块、脚本等调用它?

最佳答案

您必须以某种方式使用if __name__=='__main__':

这是mp_test.py:

import multiprocessing
import os

def worker():
"""worker function"""
print 'Worker'
return

def main(module_name):
jobs = []
print "The multiprocessing function in %s is called from %s" %(os.path.basename(__file__),module_name)
for i in range(5):
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()

这是main.py:

from imsho import *
import os

if __name__ =='__main__':
main(os.path.basename(__file__))

结果:

The multiprocessing function in mp_test.pyc is called from main.py
Worker
Worker
Worker
Worker
Worker

关于python - 可调用的多处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40221376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com