import time
from random import randint
import os
from datetime import datetime
from multiprocessing import Process, current_process
def gat(number):
result = number * 2
proc_name = current_process().name
print('{0} doubled to {1} by: {2}'.format(number, result, proc_name), 'No процесса', os.getpid())
time.sleep(5)
if __name__ == "__main__":
tt = int("1",16)
start = datetime.now()
procs = []
for number in range(tt , 1000000, 10):
p_list = [Process(target=gat, args=(number,)) for _ in range(4)]
for p in p_list:
procs.append(p)
p.start()
for p in p_list:
p.join()
вывод резулбтата:
1 doubled to 2 by: Process-1 No процесса 34156
1 doubled to 2 by: Process-3 No процесса 6860
1 doubled to 2 by: Process-2 No процесса 21248
1 doubled to 2 by: Process-4 No процесса 43948
11 doubled to 22 by: Process-5 No процесса 21740
11 doubled to 22 by: Process-6 No процесса 38564
11 doubled to 22 by: Process-7 No процесса 2516
11 doubled to 22 by: Process-8 No процесса 34140
21 doubled to 42 by: Process-9 No процесса 39400
21 doubled to 42 by: Process-10 No процесса 28212
21 doubled to 42 by: Process-11 No процесса 14160
21 doubled to 42 by: Process-12 No процесса 25208
собственно вопрос: как сделать, что бы процессам отдавалось свое число(параметр).
в моем случае, в каждой итерации всем процессам отдается одно и тоже число
как сделать чтоб первый процесс брал первое число из диапазона for number in range(tt , 1000000, 10) , второй процесс 2-е число, третий - 3-е, четвертый - 4-е.
у меня 4-ре процесса и хочу чтобы они по порядку разбирали диапазон
insolor
51.7k18 золотых знаков61 серебряный знак105 бронзовых знаков
2 ответа 2
import time
from random import randint
import os
from datetime import datetime
from multiprocessing import Process, current_process
def gat(number):
result = number * 2
proc_name = current_process().name
print('{0} doubled to {1} by: {2}'.format(number, result, proc_name), 'No процесса', os.getpid())
time.sleep(5)
if __name__ == "__main__":
tt = int("1",16)
start = datetime.now()
procs = []
for number in range(tt , 1000000, 4):
p_list = [Process(target=gat, args=(number,)) for number in range(number , 1000000, 1)[:4]]
for p in p_list:
procs.append(p)
p.start()
for p in p_list:
p.join()
вывод
1 doubled to 2 by: Process-1 No процесса 17924
2 doubled to 4 by: Process-2 No процесса 37368
3 doubled to 6 by: Process-3 No процесса 36392
4 doubled to 8 by: Process-4 No процесса 28068
5 doubled to 10 by: Process-5 No процесса 12304
6 doubled to 12 by: Process-6 No процесса 45960
7 doubled to 14 by: Process-7 No процесса 45576
8 doubled to 16 by: Process-8 No процесса 33068
Если я правильно догадываюсь, вам надо что-то такое:
if __name__ == "__main__":
pool = mp.Pool(mp.cpu_count())
lst = pool.map(gat, (x for x in range(tt , 1000000)))
# lst - готовый результат. Но поскольку вы ничего не возвращаете,
# это будет список из None
ответ дан 31 окт. 2022 в 13:44
splash58
16.6k2 золотых знака17 серебряных знаков24 бронзовых знака
-
благодарю за помощь вариант с pool попробую чуть позжеmanu– manu2022年10月31日 14:01:12 +00:00Commented 31 окт. 2022 в 14:01
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросИзучите связанные вопросы
Посмотрите похожие вопросы с этими метками.
lang-py