2011-09-03 27 views
5

Güvenli ve tembel yöntem çağrıları bazı donanımları yönetmek için PySide kullanıyorum ve arabirimde (örneğin) düğme tıklamalarına bağlı olarak göreceli olarak basit işlemler gerçekleştiriyorum. Bu donanım parçalarının her birini çalıştırma kodu başka bir iş parçacığında bulunur. kolaylık sağlamak için, bir jenerik invoke_method sinyali ekledik O donanım sürücüleri, her böyle bir UI bileşeni Açıkçası bu doğrudan bu diğer iplik sinyal niteliği erişenPySide/PyQt

my_driver.invoke_method.emit('method_name', [arg, ...], {kwarg, ...}) 

kullanabileceği .... ama ben Bu bir GIL dünyasında mutlaka tamam olup olmadığından emin değilim. Eğer bu gerçekten de tembel bir çözümse - sürücüdeki başka bir sinyale bağlı UI'de operasyona özgü bir sinyale sahip olmaksızın keyfi ipliklerde keyfi metotları çağırmak için başka büyük alternatifler var mıdır?

yerine bir donanımın farklı parça erişilen UI kodunun her bit sinyal kullanarak düşünebiliriz - do_invocation_driver_1 ve do_invocation_driver_2 gibi bir karşılık gelen sürücünün invoke_method sinyali için bu bağlayın.

cevap

4

PyQt GUI ile arabirim iş parçacıklarına genel bir yaklaşım için this post okumanızı öneririm. Gönderi soket I/O yapan bir iş parçacığı ele alır, ancak bu gerçekten herhangi bir iş parçacığı için geçerlidir. Özellikle, donanım arabirimi iş parçacıkları genellikle G/Ç kullanır, bu nedenle bu uygun olabilir.

Ele alınan yaklaşım çok genel, Queue.Queue kullanarak ve basit görevler için bir overkill gibi görünebilir (ancak bir iş parçacığında "bu" işlevini aramak istiyorum). Bununla birlikte, uygulamanız önemsiz bir şekilde büyüdüğünde, bunu takdir edeceksiniz, çünkü herhangi bir iplik senkronizasyon probleminden kaçınıyor ve çok ölçeklenebilir. Ben kişisel olarak karmaşık PyQt GUI'leri her türlü işi yapan yan iş parçacıkları ile uygulamak için kullandım.