You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.2 KiB
63 lines
2.2 KiB
2 years ago
|
#Quelle: https://stackoverflow.com/questions/6976372/mulitprocess-pools-with-different-functions
|
||
|
|
||
|
import datetime
|
||
|
import multiprocessing
|
||
|
import time
|
||
|
import random
|
||
|
|
||
|
from multiprocessing import Pool
|
||
|
|
||
|
def square(x):
|
||
|
# calculate the square of the value of x
|
||
|
print(x, x*x)
|
||
|
return x*x
|
||
|
|
||
|
def pf1(*args, **kwargs):
|
||
|
sleep_time = random.randint(3, 6)
|
||
|
print("Process : %s\tFunction : %s\tArgs: %s\tsleeping for %d\tTime : %s\n" % (multiprocessing.current_process().name, "pf1", args, sleep_time, datetime.datetime.now()))
|
||
|
print("Keyword Args from pf1: %s" % kwargs)
|
||
|
time.sleep(sleep_time)
|
||
|
print(multiprocessing.current_process().name, "\tpf1 done at %s\n" % datetime.datetime.now())
|
||
|
return (sum(*args), kwargs)
|
||
|
|
||
|
def pf2(*args):
|
||
|
sleep_time = random.randint(7, 10)
|
||
|
print("Process : %s\tFunction : %s\tArgs: %s\tsleeping for %d\tTime : %s\n" % (multiprocessing.current_process().name, "pf2", args, sleep_time, datetime.datetime.now()))
|
||
|
time.sleep(sleep_time)
|
||
|
print(multiprocessing.current_process().name, "\tpf2 done at %s\n" % datetime.datetime.now())
|
||
|
return sum(*args)
|
||
|
|
||
|
def pf3(*args):
|
||
|
sleep_time = random.randint(0, 3)
|
||
|
print("Process : %s\tFunction : %s\tArgs: %s\tsleeping for %d\tTime : %s\n" % (multiprocessing.current_process().name, "pf3", args, sleep_time, datetime.datetime.now()))
|
||
|
time.sleep(sleep_time)
|
||
|
print(multiprocessing.current_process().name, "\tpf3 done at %s\n" % datetime.datetime.now())
|
||
|
return sum(*args)
|
||
|
|
||
|
def smap(f, *arg):
|
||
|
if len(arg) == 2:
|
||
|
args, kwargs = arg
|
||
|
return f(list(args), **kwargs)
|
||
|
elif len(arg) == 1:
|
||
|
args = arg
|
||
|
return f(*args)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
# Define the dataset
|
||
|
dataset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||
|
|
||
|
# Output the dataset
|
||
|
print ('Dataset: ' + str(dataset))
|
||
|
|
||
|
# Run this with a pool of 5 agents having a chunksize of 3 until finished
|
||
|
agents = 5
|
||
|
chunksize = 3
|
||
|
with Pool(processes=agents) as pool:
|
||
|
result = pool.map(square, dataset)
|
||
|
print("Result of Squares : %s\n\n" % result)
|
||
|
with Pool(processes=3) as pool:
|
||
|
result = pool.starmap(smap, [(pf1, [1,2,3], {'a':123, 'b':456}), (pf2, [11,22,33]), (pf3, [111,222,333])])
|
||
|
|