Wpis z mikrobloga

Jeśli chciałbym w Pythonie 3.5 wykonywać kilka instrukcji niezależnych od siebie (ale wykorzystujących na przykład ten sam zasób, np. pendrive'a) jednocześnie, to powinienem wykorzystać _asyncio czy multiprocessing_?

Przykładowo - chciałbym wykonać kopiowanie iluśtam plików z HDD na pendrive'a, ale każde kopiowanie z osobna móc zatrzymać, anulować itd. Jak się do tego zabrać? Co jest w moim przypadku lepsze?

Pytanie bonus - czy w razie potrzeby kod asynchroniczny można "puścić" synchronicznie?

#programowanie #naukaprogramowania #python #python3 #asynchroniczne #multiprocessing
  • 5
  • Odpowiedz
@asunez: jeśli chodzi o wgrywanie na pena, to i tak możesz puścić co najwyżej jeden strumień. Jak puścisz dwa, to one się będą przełączać między sobą, co tylko zwolni przesył drastycznie.
Do kopiowania to kolejkę trzeba robić.
  • Odpowiedz
@Kargaroth: To może zły przykład podałem - a jakbym miał kilka pendrive'ów? Chodzi mi o bardziej generalną różnicę między asyncio a multiprocessingiem w Pythonie i czy w ogóle mi się to przyda, czy tylko będzie przeszkadzać - bo może jest lepsze tego rozwiązanie.
  • Odpowiedz
@asunez: Znowu słaby przykład, jak magistralę usb będziesz miał jedną, to żadna różnica ile pendrivów i ile plików na raz, wysyłać się będzie jeden, przełączanie tylko spowolni sprawę.
  • Odpowiedz
@asunez: asyncio jest generalnie do oczekiwania na zasoby, albo na coś innego, do pętli eventów, albo opóźniania reakcji, etc. multiprocessing może ci się przydać jak będziesz chciał przeliczyć niezależnie różne obszary pamięci, nie wiem, mnożyć macierze. Jak byś to połączył to możesz równolegle oczekiwać na niezależne zdarzenia, chociaż to już się trochę bez sensu robi, ale kto wie.
  • Odpowiedz
@asunez: jw. + asyncio wtedy kiedy masz zasoby - MP wtedy kiedy masz dużo nie mocno zależnych od siebie obliczeń (żeby było jak najmniej synchronizacji).
  • Odpowiedz