这是对多处理全局变量的明智使用吗?
Is this a wise use of a global variable with multiprocessing?
我正在使用 Python 的多处理库将一堆数据发送到 API。我必须为每个请求发送一条记录,所以我使用池来发出 n 个并行请求。我想从这些请求中获取结果(汇总成一个字符串)并将其与其他数据结合起来进行记录。
所以这里是我正在尝试的一个简化示例,提炼为多处理本身。这样使用全局变量是否明智?有没有更好的方法?
谢谢
import multiprocessing
message = ""
def cTest(m):
global message
message = "-".join(m)
def mTest(name):
print(name)
return("t" + name)
if __name__ == '__main__':
testList = ['Jake', 'Jake', 'Jake', 'Jill', 'Jake', 'Jake']
pool = multiprocessing.Pool(processes=2)
pool.map_async(mTest, testList, 1, cTest)
pool.close()
pool.join()
print("-->" + message)
输出
Jake
Jake
Jake
Jill
JakeJake
-->tJake-tJake-tJake-tJill-tJake-tJake
如果没有 cTemp
和 global
,我会这样做
results = pool.map_async(...)
values = results.get()
message = "-".join(values)
print("-->" + message)
编辑:
完整的工作代码
import multiprocessing
def mTest(name):
return "t" + name
if __name__ == '__main__':
testList = ['Jake', 'Jake', 'Jake', 'Jill', 'Jake', 'Jake']
pool = multiprocessing.Pool(processes=2)
results = pool.map_async((mTest, testList, 1)
pool.close()
pool.join()
values = results.get()
message = "-".join(values)
print("-->" + message)
我正在使用 Python 的多处理库将一堆数据发送到 API。我必须为每个请求发送一条记录,所以我使用池来发出 n 个并行请求。我想从这些请求中获取结果(汇总成一个字符串)并将其与其他数据结合起来进行记录。
所以这里是我正在尝试的一个简化示例,提炼为多处理本身。这样使用全局变量是否明智?有没有更好的方法?
谢谢
import multiprocessing
message = ""
def cTest(m):
global message
message = "-".join(m)
def mTest(name):
print(name)
return("t" + name)
if __name__ == '__main__':
testList = ['Jake', 'Jake', 'Jake', 'Jill', 'Jake', 'Jake']
pool = multiprocessing.Pool(processes=2)
pool.map_async(mTest, testList, 1, cTest)
pool.close()
pool.join()
print("-->" + message)
输出
Jake
Jake
Jake
Jill
JakeJake
-->tJake-tJake-tJake-tJill-tJake-tJake
如果没有 cTemp
和 global
results = pool.map_async(...)
values = results.get()
message = "-".join(values)
print("-->" + message)
编辑:
完整的工作代码
import multiprocessing
def mTest(name):
return "t" + name
if __name__ == '__main__':
testList = ['Jake', 'Jake', 'Jake', 'Jill', 'Jake', 'Jake']
pool = multiprocessing.Pool(processes=2)
results = pool.map_async((mTest, testList, 1)
pool.close()
pool.join()
values = results.get()
message = "-".join(values)
print("-->" + message)