Найти - Пользователи
Полная версия: threading Lock не работает
Начало » Python для экспертов » threading Lock не работает
1
Alex_Kutsan
Была програмка без потоков, (точнее без потоков которые хотят изменять графический оинтерфейс) всё было ОК. ну добавил поток.

		print("send_post_by_direct ",user.name,post.data)
try:
T = threading.Thread(None,user.get_Post,name = '%s_send_post_by_direct'%self.name,args=(self,post))
T.start()
except:
print("error Threading send_post_by_direct")
соль в том что get_Post в самом своём сердце таки вызывает изменения в интерфейсе
если точно то в этом месте
...
code = "A.form.Screen_User_%i.appendPlainText('|%s(far) was deleted|')"%(index,params[1].name)
...
Lock.acquire()
try:
print("befor exec")

exec(code)
print("exec WOCKS")


except:
print("error exec(LOG): "+ code)
Lock.release()
слато выдавать ошибку
QObject::connect: Cannot queue arguments of type ‘QTextCursor’
(Make sure ‘QTextCursor’ is registered using qRegisterMetaType().)

время от времени выдаёт время от времени нет. А иногда вообще вылетает с таким-же сообщением только ещё с ошибкой сегментирования в придачу. Вроде бы Нити не должны иметь доступ к изменению интерфейса когда он занят, но нет, имеют. уже не усомнился(маловырный) в threading.Lock сделал свой Lock.
class Lock():
def __init__(self):
self.locked = False
def lock(self):
self.locked = True
def unlock(self):
self.locked = False
перд изменение интерфейса вставлял
while L.locked:
pass
L.lock()
...
L.unlock()
но, по барабану, результат одинаков.
Андрей Светлов
Нельзя менять интерфейс из потока. Следует посылать сообщение.
Alex_Kutsan
Ага, тоесть получается нужно сгенерировать сигнал и поймать его в классе . Как сгененрировать сигнал? с параметрами?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB