0
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 бронзовых знаков
задан 31 окт. 2022 в 11:18
0

2 ответа 2

0
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
ответ дан 31 окт. 2022 в 12:49
0

Если я правильно догадываюсь, вам надо что-то такое:

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
1
  • благодарю за помощь вариант с pool попробую чуть позже Commented 31 окт. 2022 в 14:01

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.