import multiprocessing as mp
from datetime import datetime
def worker(a):
print(str(a)+": "+str(datetime.now()))
time.sleep(1)
pool=mp.Pool(3)
if __name__ == '__main__':
pool.map(worker,range(10))
the output is:
0: 2017-04-18 23:37:31.399574
1: 2017-04-18 23:37:31.400422
2: 2017-04-18 23:37:31.400571
3: 2017-04-18 23:37:32.401644
4: 2017-04-18 23:37:32.401765
5: 2017-04-18 23:37:32.401904
6: 2017-04-18 23:37:33.403168
7: 2017-04-18 23:37:33.403250
8: 2017-04-18 23:37:33.403370
9: 2017-04-18 23:37:34.405025
The 3 workers start at the same time.
I really want to know that is it possible to start the 3 workers at (slightly) different time?
Much thanks in advance!
PS. As in the comment, any slightly different time would be fine (would be better if I can control). However, I do not want the workers to sleep before every job they do. I just want the 3 workers to start at different times but afterwards never sleep between jobs. So, I am not sure that putting time.sleep in worker function works.
Pools can run an initializer in the child process. Use that to wait.
import multiprocessing as mp
from datetime import datetime
import time
import random
import os
def sleepy():
nap = random.randint(1,10)
print(os.getpid(), 'sleeps', nap)
time.sleep(nap)
def worker(a):
print(os.getpid(), str(a)+": "+str(datetime.now()))
time.sleep(1)
pool=mp.Pool(3, initializer=sleepy)
if __name__ == '__main__':
pool.map(worker,range(10))
You can control sleep time by creating a queue with the times. Each initializer reads one value
import multiprocessing as mp
from datetime import datetime
import time
import random
import os
import threading
def sleepy(time_q):
timeout = time_q.get()
print(os.getpid(), 'sleeps', timeout, datetime.now())
time.sleep(timeout)
def worker(a):
print(os.getpid(), 'worker', str(a)+": "+str(datetime.now()))
time.sleep(1)
if __name__ == '__main__':
pool_size = 3
time_q = mp.Queue()
for sleep_time in range(1, pool_size+1):
time_q.put(sleep_time)
pool=mp.Pool(pool_size, initializer=sleepy, initargs=(time_q,))
pool.map(worker,range(10))
time_q.close()
time_q.join()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With