我有一个关于在Python中并行运行函数的问题。
我尝试使用多处理来减少从 API 发送和接收数据的时间,但是当我执行下面的代码时,它往往会使我的 IDE 崩溃。
def network_request_function(value)
#this function sends requests using value.
for i in list:
p1 = Process(target=network_request_function, args=(i,))
p1.start()
你能提供一种方法来修复我的代码吗? 还是有更好的选择?
您应该指定在 IDE 上运行的平台。此外,如果network_request_function
所做的只是发出网络请求并等待不需要密集 CPU 的进一步处理的回复,那么这似乎应该使用多线程而不是多处理和一个多线程池,其中并发线程的数量可以受到限制,以防输入列表的长度非常大,并且从network_request_function
获取返回值更简单。可能感兴趣。并且您不应该使用名称,例如list
,它恰好是用于命名变量的内置函数或类的名称。
例如:
def network_request_function(value):
#this function sends requests using value and returns the reply
return reply
if __name__ == '__main__': # Required if we switch to multiprocessing
# To use multiprocessing:
#from multiprocessing.pool import Pool as Executor
# To use multithreading:
from multiprocessing.pool import ThreadPool as Executor
# inputs is our list of value arguments used with network_request_function:
inputs = []; # This variable is set somewhere
# May need to be a smaller number if we are using multiprocessing and
# depending on the platform:
MAX_POOL_SIZE = 200
pool_size = min(len(inputs), MAX_POOL_SIZE)
with Executor(pool_size) as pool:
# Get list of all replies:
replies = pool.map(network_request_function, inputs)