2014-10-31 14 views
9

Okey çocuklar asyncio ve Gtk + ile ilgili soru. Gtk.main döngüsünde aşağıdaki kodu nasıl çalıştırabilirim? Örnek aradım ama bulamadım.Gynk ana döngüsünde çalışan Asyncio çağrıları

#!/usr/bin/python3.4 

import asyncio 

@asyncio.coroutine 
def client_connected_handler(client_reader, client_writer): 
    print("Connection received!") 
    client_writer.write(b'Hello') 
    while True: 
     data = yield from client_reader.read(8192) 
     if not data: 
      break 
     if 'EXIT' in data.decode(): 
      print("Closing server") 
      break 
     print(data) 
     client_writer.write(data) 
    print('Server is closed') 


loop = asyncio.get_event_loop() 
Server=asyncio.start_server(client_connected_handler, 'localhost', 2222) 
server=loop.run_until_complete(Server) 
loop.run_forever() 

DÜZENLEME:

Okey Ben gbulb ile benim tecrübeyle yazmalı. İlk önce pip3 kullanarak aradım. Onu buldum ve yüklemeye çalıştım ama hatalı bağlantı nedeniyle başarısız oldu (yükleme için süper kullanıcı kullanıyordum). Sonraki Ben kendi depodan yükledim ve onu yükledim. Ben bu example aldım ve çekirdek modüllerinde eksik argümanlar için bazı hatalar var.Ben hangi hata ben farklı bir PC'den yazma Iam neden olduğunu bilmiyorum Güncelleme en kısa sürede yapılır. Ayrıca başka birinin test edebileceği için minnettar olurum.

+0

çalışıyor gbulb' 'PIP3 yüklemek, yukarıda güncellemek için, ve karşı demo içinde: etapta bu düzeltmeyi

, her iki gelen bağlantıları kabul ve çalıştırmak için örnek değiştirmek için GTK önemsiz [Github] 'daki Örnekler bölümü (https://github.com/nathan-hoad/gbulb) bir aksama olmadan çalışır. – jcoppens

cevap

9

gbulb library, tam olarak gereksinim duyduğunuz şeydir, asyncio ana döngü arabirimi ile GLIB ana döngü uygulaması arasındaki bir bağdır. Ancak, gbulb'un geçerli yöneticisi, Python 3.4 ile birlikte gönderildiği gibi asyncio için bozulur. Bunu düzeltmek için, master yerine this fork adresini kontrol edebilirsiniz.

#!/usr/bin/python3.4 

import asyncio, gbulb 
from gi.repository import Gtk 
asyncio.set_event_loop_policy(gbulb.GtkEventLoopPolicy()) 

@asyncio.coroutine 
def client_connected_handler(client_reader, client_writer): 
    print("Connection received!") 
    client_writer.write(b'Hello') 
    while True: 
     data = yield from client_reader.read(8192) 
     if not data: 
      break 
     if 'EXIT' in data.decode(): 
      print("Closing server") 
      break 
     print(data) 
     client_writer.write(data) 
    print('Server is closed') 


loop = asyncio.get_event_loop() 
Server=asyncio.start_server(client_connected_handler, 'localhost', 2222) 
server=loop.run_until_complete(Server) 

w = Gtk.Window() 
w.add(Gtk.Label('hey!')) 
w.connect('destroy', Gtk.main_quit) 
w.show_all() 

loop.run_forever() 
İlgili konular