[英]how to provide multiprocessing.process unique variblables
我有一个包含 ID 号的列表,我想在 API 调用中为每个多处理器实现每个唯一的 ID 号,同时运行相同的相应功能,对每个处理器实现相同的条件语句等。我试图理解它,但那里网上关于这个程序的不多。
我想使用一个 for 循环,但我不希望每个运行这个 for 循环的处理器都拾取列表中的每个项目。 我只需要将每个项目关联到每个处理器。
我在想这样的事情:
from multiprocessing import process
import requests, json
ID_NUMBERS = ["ID 1", "ID 2", "ID 3".... ETC]
BASE_URL = "www.api.com"
KEY = {"KEY": "12345"}
a = 0
for x in ID_NUMBERS:
def[a]():
while Active_live_data == True:
# continuously loops over, requesting data from the website
unique_api_call = "{}/livedata[{}]".format(BASE_URL, x)
request_it = requests.get(unique_api_call, headers=KEY)
show_it = (json.loads(request_it.content))
#some extra conditional code...
a += 1
processes = []
b = 0
for _ in range(len(ID_NUMBERS))
p = multiprocessing.Process(target = b)
p.start()
processes.append(p)
b += 1
任何帮助将不胜感激!
最亲切的问候,
安德鲁
您可以使用map
function:
import multiprocessing as mp
num_cores = mp.cpu_count()
pool = mp.Pool(processes=num_cores)
results = pool.map(your_function, list_of_IDs)
这将执行 function your_function
,每次使用列表list_of_IDs
中的不同项目,并且your_function
返回的值将存储在值列表( results
)中。
与@AlessiaM 相同的方法,但在concurrent.futures
模块中使用高级 api。
import concurrent.futures as mp
import requests, json
BASE_URL = ''
KEY = {"KEY": "12345"}
ID_NUMBERS = ["ID 1", "ID 2", "ID 3"]
def job(id):
unique_api_call = "{}/livedata[{}]".format(BASE_URL, id)
request_it = requests.get(unique_api_call, headers=KEY)
show_it = (json.loads(request_it.content))
return show_it
# Default to as many workers as there are processors,
# But since your job is IO bound (vs CPU bound),
# you could increase this to an even bigger figure by giving the `max_workers` parameter
with mp.ProcessPoolExecutor() as pool:
results = pool.map(job,ID_NUMBERS)
# Process results here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.