Son zamanlarda, turşu işlemlerinin kullanımı yoluyla dağıtılmış hesaplama işlemlerini kolaylaştırmaya çalışan bazı Python kodlarıyla ilgili bir soru sorulmuştur. Görünüşe göre, bu işlevsellik tarihsel olarak mümkün, ancak güvenlik nedeniyle aynı işlevsellik devre dışı bırakıldı. Bir işlev nesnesini bir soket üzerinden iletmeye çalışan ikincide, sadece referans iletildi. Eğer yanılıyorsam düzeltin ama bu sorunun Python'un geç bağlanmasına bağlı olduğuna inanmıyorum. Süreç ve iş parçacığı nesnelerinin elde edilemediği varsayımı göz önüne alındığında, kalınabilir bir nesneyi iletmenin herhangi bir yolu var mıdır? Her iş için sıkıştırılmış kaynak kodu iletmekten kaçınmak isteriz, çünkü bu muhtemelen tüm girişimi anlamsız hale getirecektir. Taşınabilirlik nedeniyle sadece Python çekirdek kütüphanesi kullanılabilir.Herhangi bir tür kalibrelenebilir uçbirimi seçmemiz gerekiyor.
7
A
cevap
6
Sen bayt kodu sıralamakta ve diğer fonksiyon şeyler turşu olabilir:
import marshal
import pickle
marshaled_bytecode = marshal.dumps(your_function.func_code)
# In this process, other function things are lost, so they have to be sent separated.
pickled_name = pickle.dumps(your_function.func_name)
pickled_arguments = pickle.dumps(your_function.func_defaults)
pickled_closure = pickle.dumps(your_function.func_closure)
# Send the marshaled bytecode and the other function things through a socket (they are byte strings).
send_through_a_socket((marshaled_bytecode, pickled_name, pickled_arguments, pickled_closure))
başka piton programında yer: yeniden oluşturulması
import marshal
import pickle
import types
# Receive the marshaled bytecode and the other function things.
marshaled_bytecode, pickled_name, pickled_arguments, pickled_closure = receive_from_a_socket()
your_function = types.FunctionType(marshal.loads(marshaled_bytecode), globals(), pickle.loads(pickled_name), pickle.loads(pickled_arguments), pickle.loads(pickled_closure))
Ve işlevi içinde globaller ilişkin referansları olurdu işlevi alan komut dosyası. Python 3
, kullanılan fonksiyon nitelikleri__code__
,
__name__
,
__defaults__
ve
__closure__
bulunmaktadır.
Lütfen unutmayın, send_through_a_socket
ve receive_from_a_socket
gerçekte mevcut değildir ve bunları, veriyi soketler üzerinden aktaran gerçek kodla değiştirmelisiniz.
İlgili konular
- 1. HTML'den işaretlemeye, herhangi bir öneriye gitmem gerekiyor mu?
- 2. "Seçenek" seçeneğinde "içerme" yöntemi neden "Herhangi bir" tür yerine alt sınırı olan ikinci bir tür kullanıyor?
- 3. Herhangi bir tür için bayt dizisi nasıl dönüştürülür
- 4. Tür
- 5. Bir tür tanımında iç içe tür parametreleri
- 6. Bir tür alan ve bir tür döndüren bir işlev yazabilir
- 7. Bir javascript işlev çağrısına, bunu yapmak için herhangi bir şekilde bağlanmanız mı gerekiyor?
- 8. tür açıklamaları bir yineleyici
- 9. bir tür hatasının
- 10. Kullanıcı tanımlı bir tür
- 11. MapActivity, bir tür için
- 12. iOS 8 Bir tür
- 13. Ne tür bir istisna EEMessageException?
- 14. Kullanılmayan bir tür parametresi etrafında çalışmak için herhangi bir yolu var mı?
- 15. Herhangi bir IPMI simülatörü var mı?
- 16. Elastik arama - bir tür yeniden adlandırma
- 17. Visustin için herhangi bir (ücretsiz) alternatif var, mevcut JavaScript kodundan akış çizelgeleri oluşturmam gerekiyor
- 18. Facebook'taki gibi mesajlaşma sistemi yaratmanız gerekiyor - veritabanı tasarımı için herhangi bir fikir
- 19. 'Tür argümanları'
- 20. Tür düzeyi hesaplamaları kullanırken tür/tür denetimi başarısızlığı yazın.
- 21. Niçin anonim tür kullanıyor ve GroupBy'de açık bir tür kullanmıyorsunuz?
- 22. Bir veri çerçevesindeki negatif değerlerin sayılması gerekiyor
- 23. Jersey’in bir dosyaya kaydedilmesi mi gerekiyor?
- 24. Herhangi bir Monoid
- 25. Neden f = (+) bir tür ek açıklama gerektirmiyor?
- 26. Tür İmzalar
- 27. Bir sihirbaz oluşturmak için herhangi bir desen var mı?
- 28. Bir tür (bir "typeof()") bir enum kullanarak kaydetmek mümkün mü?
- 29. tür uyuşmazlığı
- 30. Nginx: $ request_time'ın açıklaması gerekiyor
"Güvenlik nedenlerinden dolayı * X'e izin verilmez *; bu konuda nasıl çalışabilirim?" Sorusunu sorduğunuzda, kendinize neden ihtiyaç duyduğunuzu açıklayan ** detaylı bir açıklama ile hazırlanmalısınız * * etrafında çalışmak için. Güvenlik ciddi bir iştir. –
@Karl, Bu mükemmel bir nokta. Bir geçici çözümün bir ihtiyaç olduğunun belirtilmesi bir abartı olacaktır. Kolay çıkış yolunu önerme hatasını bile yaptım. Artur'un önerisiyle başlıyorum. – motoku
Bir kod python ise, python çekirdek kitaplığı kadar taşınabilir. Kalibre edilebilen herhangi bir python serileştiricisine sahibim… ve saf python paralel ve dağıtılmış bilgi işlem kütüphanesi için omurga olarak kullanılır. Taşınabilir ... ve hiyerarşik paralel ve dağıtılmış paralel harita ve boru ağları oluşturabilir. Bir paket saf python ise, bunu hariç tutmamalısınız - zaten yüklü değilse dağıtılmış kümedeki kullanıcı alanınıza yükleyin. Temel olarak 'copy_reg' çağrılarının bir koleksiyonu olan 'dill 'paketine bakın. –