Laat 2 functies tegelijkertijd draaien

Ik probeer 2 functies tegelijkertijd te laten werken.

def func1():
    print 'Working'
def func2():
    print 'Working'
func1()
func2()

Weet iemand hoe dit moet?


Antwoord 1, autoriteit 100%

Doe dit:

from threading import Thread
def func1():
    print('Working')
def func2():
    print("Working")
if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

Antwoord 2, autoriteit 14%

Het antwoord over threadingis goed, maar je moet iets specifieker zijn over wat je wilt doen.

Als je twee functies hebt die allebei veel CPU gebruiken, zal threading (in CPython) waarschijnlijk nergens toe leiden. Dan wil je misschien de multiprocessing-modulebekijken of misschien wil je jython/IronPython.

Als CPU-gebonden prestaties de reden zijn, zou je zelfs dingen in (niet-threaded) C kunnen implementeren en een veel grotere versnelling krijgen dan twee parallelle dingen doen in python.

Zonder meer informatie is het niet eenvoudig om een ​​goed antwoord te bedenken.


Antwoord 3, autoriteit 7%

Dit kan op elegante wijze worden gedaan met Ray, een systeem waarmee u gemakkelijk kunt parallelliseren en distribueren uw Python-code.

Om uw voorbeeld parallel te laten lopen, moet u uw functies definiëren met de @ray.remote decoratoren ze vervolgens aanroepen met .remote.

import ray
ray.init()
# Define functions you want to execute in parallel using 
# the ray.remote decorator.
@ray.remote
def func1():
    print("Working")
@ray.remote
def func2():
    print("Working")
# Execute func1 and func2 in parallel.
ray.get([func1.remote(), func2.remote()])

Als func1()en func2()resultaten opleveren, moet u de bovenstaande code een beetje herschrijven door ray.get([func1.remote(), func2.remote()])met:

ret_id1 = func1.remote()
ret_id2 = func1.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])

Het gebruik van Ray heeft een aantal voordelen ten opzichte van de multiprocessing-module of multithreading gebruiken. In het bijzonder zal de dezelfde codezowel op een enkele machine als op een cluster van machines draaien.

Voor meer voordelen van Ray, zie dit gerelateerde bericht.

Other episodes