from PySide.QtCore import Signal, QObject
from multiprocessing import Pool
def some_computation():
pass
# ..some computations
return 'result'
class MyClass(QObject):
my_signal = Signal()
def __init__(self):
self.mylistwidget = # ... QListWidget from somewhere
# bind the signal to my slot
self.my_signal.connect(self.on_my_signal)
# this is called after computation thread is finished
def my_callback_fct(result):
# ..bla bla
self.my_signal.emit()
# this is the function I call
def do_some_async_computation(self)
pool = Pool(processes=2)
pool.apply_async(target=some_computation, callback=my_callback_fct)
# this is the slot
def on_my_signal(self):
self.mylistwidget.clear()
Я прочитал вокруг StackOverflow, что для того, чтобы изменить графический интерфейс из вторичного потока выполнения, нужно использовать механизм слот-сигнала, который является то, что я сделал в MyClass, хотя, когда я называю do_some_async_computation Я хотел бы ожидать бассейн, чтобы инициировать вторичный поток для some_computation функции ..which происходит, после того, как вычисление закончило my_callback_fct выполняется соответствующим образом, который излучает my_signal сигнала, который подключается к on_my_signal слот, который выполняется, как и ожидалось, но когда изменения self.mylistwidget это дает Runtime Error
/QWidget runtime error redundant repaint detected
Думаю, вам придется включить здесь достаточно кода, чтобы воспроизвести проблему. Если я создаю свою собственную примерную программу, используя только то, что вы предоставили, вызов 'mylistwidget.clear()' действительно работает нормально. – dano
Как обрабатывается объект Result-object apply_async? В приведенном выше коде my_callback_fct никогда не вызывался. – deets
@deets 'my_callback_fct' вызывается автоматически, когда' some_comput' завершается (пока он не генерирует исключение). – dano