2016-03-24 36 views
0

bu örnekte dinamik bir sınıf sözlüğü güncelleştirmek için en iyi yolu nedir... Ben onun modülünde şöyle istemciye bir sunucu itin üzerinde çalışıyorum

module.py

class Stream(object): 

    def __init__(self): 
     self.object_message = {'movie1': '0', 'movie2': '0', 'movie3': '0'} 

    def event_stream(self): 
     sc = Stream() 
     print sc.object_message['movie1'] 
     yield 'data: %s\n\n' % sc.object_message['movie1'] 

event_stream'dan veri için bir istemci tarafı Sunucu Gönderilen Olaylar yoklaması olan bir Flask hizmeti üzerine kurulmuştur. Şu an bu bölümüm çalışıyor, çünkü kullanıcı arayüzüm, her birkaç saniyede bir 0 verisini alıyor. Şimdi bu verileri dinamik olarak çalışan bir işlemden değiştirmeye çalışıyorum. İşte

yoklama olan

class RequestTags(object): 

    def process(self, arg1): 
     sc = Stream() 
     sc.object_message['movie1'] = 1 
     sc.object_message['movie2'] = 2 
... 

event_stream iken şimdiye kadar denedim bir test ..., ben Akışında başlatıldı değişkeni güncelleştirmek amacıyla process tetikledi. Ayrıca statik bir Stream değişkeni denedim. Borg ve Singleton modellerine baktım, ancak mevcut kullanım durumumda bunun nasıl yapılabileceğine dair biraz yeşil görünüyor.

cevap

0

doğrudan sınıf düzeyi değişken eserler erişme gibi görünüyor. Python uzmanlarına daha Pythonic bir yol sunma ve neden sunma şansı vermeden önce bunu biraz daha açık tutacağım. Temel olarak bu, aksi takdirde benim meydan okuma çözüldü.

class RequestTags(object): 

    tags = {'tag1': '0', 'tag2': '0', 'tag3': '0'} 
. 
. 
. 
# adding new data inline 
self.tags['tag1'] = <change inline> 
. 
. 
. 

class Stream(object): 

    def event_stream(self): 
     yield 'data: %s\n\n' % RequestTags.tags['tag1'] 
0

Hem işlem hem de event_stream öğelerinde Stream() sınıfının yeni örneklerini oluşturuyorsunuz. Aradığınız davranışı elde etmek için sc'yi akışa bir parametre olarak geçirmenizi öneririz. Böyle

şey:

class RequestTags(object): 

    def process(self, arg1, sc): 
     sc.object_message['movie1'] = 1 
     sc.object_message['movie2'] = 2 
+0

Ne yazık ki, bu ve bazı benzer değişiklikler çalışmaz. Öğlen yemeğinden sonra kazacağım ve başka fikirleri deneyeceğim. – Shane

İlgili konular