2012-04-10 10 views
8

Tutejsze http://twistedmatrix.com/documents/current/api/twisted.internet.task.html#cooperate docs sugerują, że różnica jest taka, że ​​współpracują Zwraca CooperativeTask natomiast coiterate Zwraca odroczony (świadczy o moich własnych badaniach, niewymienione w docs). Zainwestowałem weekend w naukę podstaw Twisted, więc rozumiem, czym jest Odroczona i byłem dobrym chłopcem, wysyłając mój kod blokujący do wątków/procesów. Rozumiem, że coiterate idzie tak szybko, jak pozwala na to Twisted, podczas gdy LoopingCall próbuje strzelać w wybranym przedziale czasu.Skręcona (Python) - jaka jest różnica między współpracą a coiteracją?

Mam przeczucie, że współpracują() zadania są wykonywane wewnątrz obiektów CooperativeTask i coiterate() w obiektach odroczony. Jeśli ktoś potrafi podsumować różnice w zachowaniu między współpracownikami i współpracownikami, byłbym wdzięczny.

Odpowiedz

9

Prawie, ale nie do końca. cooperate to nieco nowszy interfejs API niż coiterate. cooperate jest po prostu nieco lepszą wersją coiterate i prawie zawsze chcesz z niego korzystać. Zwrot z CooperativeTask zapewnia dwie korzyści. Po pierwsze, można wykonać zadanie pause i resume bez niego, a po drugie, można wygenerować multiple Deferreds, które powiadamia użytkownika o wykonaniu zadania bez wzajemnego zakłócania się, a nie tylko jednego.

Zarówno coiterate i cooperate produkować CooperativeTask pod maską, i używają bardzo krótki odstęp LoopingCall jako domyślnego harmonogramu. Jeśli chcesz użyć innego harmonogramu zadań, zawsze możesz utworzyć własną instancję Cooperator.

(Nawiasem mówiąc, jeśli nie ma jeszcze żadnego doc bug na fakt, że coiterate zwraca Deferred należy złożyć jeden.)

+0

Dokładnie odpowiedź szukałem a nawet więcej. Dzięki! – pagga

Powiązane problemy