Yeni başlayan öğrencilerim için bir kütüphaneyle uğraşıyorum ve Python'daki çoklu işlem modülünü kullanıyorum. Bir örnek olarak, importing and using a module that uses multiprocessing without causing infinite loop on WindowsPython'un çoklu işlem modülü, Windows'da yeni bir işlem başlatırken neden __main__ dosyasını içe aktarıyor?
Ben bir modül mylibrary.py
olduğunu varsayalım: Bu sorunla karşılaştım ben main.py
çalıştırırsanız
# main.py
import mylibrary
mylibrary.foo()
:
# mylibrary.py
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print "Hello from the new process"
def foo():
p = MyProcess()
p.start()
Ve bu kütüphaneyi çağıran bir ana programı Windows, main.py'yi yeni sürece aktarmaya çalışır, bu da kodun tekrar yürütüldüğü anlamına gelir ve bu da sonsuz bir süreç oluşturma döngüsüyle sonuçlanır. Ben şöyle düzeltebilirim:
import mylibrary
if __name__ == "__main__":
mylibrary.foo()
Fakat, bu yeni başlayanlar için oldukça kafa karıştırıcı olduğunu ve gerekli olmamalıdır gibi üstelik görünüyor. Yeni işlem mylibrary
'da oluşturuluyor, bu nedenle neden yeni süreç mylibrary
'u içe aktarmıyor? main.py
'u değiştirmek zorunda kalmadan bu soruna geçici bir çözüm bulmak için bir yol var mı?
Bu arada, Python 2.7 kullanıyorum.
Bu cevap kabul edilmelidir. – Marcin
Eminim ki bir şey kaçırmıyorum, ama sorum şu ki, çocuk sürecinin bütün kodu tekrar çalıştırması gerekiyor. Neden sadece yeni süreci başlatan modül değil? – Laura
@Laura: Tüm kodunuzu tekrar çalıştırmanız gerekiyor, çünkü eğer yapmadıysa kodunuz olmazdı. Çocuk süreci tamamen taze başlar ve eğer kendi fonksiyonlarınızı istiyorsanız, kodunuza ihtiyaç duyar. –