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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta