AttributeError: no se puede encurtir el cálculo del objeto local ... function1 usando la cola de multiprocesamiento
Tengo el siguiente código usando el planificador y el módulo de multiprocesamiento:
def computation():
def function1(q):
while True:
daydate = datetime.now()
number = random.randrange(1, 215)
print('Sent to function2: ({}, {})'.format(daydate, number))
q.put((daydate, number))
time.sleep(2)
def function2(q):
while True:
date, number = q.get()
print("Recevied values from function1: ({}, {})".format(date, number))
time.sleep(2)
if __name__ == "__main__":
q = Queue()
a = Process(target=function1, args=(q,))
a.start()
b = Process(target=function2, args=(q,))
b.start()
a.join()
b.join()
schedule.every().monday.at("08:45").do(computation)
schedule.every().tuesday.at("08:45").do(computation)
while True:
schedule.run_pending()
time.sleep(1)
Sin embargo, al ejecutar el código, aparece el siguiente error:
AttributeError: no se puede encurtir el cálculo del objeto local ... function1
Y
OSError: [WinError 87] El parámetro es incorrecto
¿Cómo se resuelve este problema? Intenté resolver esto definiendo una función en el nivel superior de un módulo como se indica en los documentos https: //docs.python.org/2/library/pickle.html#what-can-be-pickled-and-unpickle) sin embargo, sigue dando el mismo error.