cuốn sách gpt4 ai đã làm

python - 阻塞 QThread 阻塞 GUI

In lại Tác giả: Walker 123 更新时间:2023-11-28 21:28:07 32 4
mua khóa gpt4 Nike

对于一个简单的聊天程序,我使用了一个通过 boost::python 包装的 c 库。

使用 PyQT 编写了一个简单的 GUI。接收消息是通过阻塞调用完成的lib说。对于独立刷新的 GUI,通信部分在 QThread 中。

虽然我假设 GUI 和通信是独立的,但 GUI 极度无响应并且似乎只在消息传入时更新。

#!/usr/bin/env python

hệ thống nhập khẩu

from PyQt4.QtCore import *
from PyQt4.QtGui import *

import pynetcom2
import time


class NetCom(QThread):

def __init__(self):
QThread.__init__(self)
self.client = pynetcom2.Client()
self.client.init('127.0.0.1', 4028)
self.client.provide('myChat', 1)
self.client.subscribe('myChat', 100)

def run(self):
while (1):
print "Waiting for message..."
text = self.client.recvStr('myChat', True)
return



class Netchat(QMainWindow):

def __init__(self, argv):

if (len(argv) != 2):
print "Usage: %s " %(argv[0])
sys.exit(1)
self.nickname = argv[1]
print "Logging in with nickname '%s'" %(self.nickname)

super(Netchat, self).__init__()
self.setupUI()

rect = QApplication.desktop().availableGeometry()
self.resize(int(rect.width() * 0.3), int(rect.height() * 0.6))
self.show()

self.com = NetCom()
self.com.start()

def setupUI(self):
centralWidget = QWidget()
self.setCentralWidget(centralWidget)

self.testList = QListWidget()

mainLayout = QHBoxLayout()
mainLayout.addWidget(self.testList)
centralWidget.setLayout(mainLayout)

if __name__ == "__main__":
app = QApplication(sys.argv)
netchat = Netchat(sys.argv)
app.exec_()

câu trả lời hay nhất

这可能是由臭名昭著的全局解释器锁 (GIL) 引起的。 Python 不允许两个线程同时执行 Python 代码。在您的 C 函数中,如果您希望 GUI 代码并行运行,您必须显式释放并重新获取 GIL。

这在 Python C API 文档中有解释:Thread State and the Global Interpreter Lock .

它归结为在您的 C 扩展中使用以下宏:

Py_BEGIN_ALLOW_THREADS

// Your expensive computation goes here.

Py_END_ALLOW_THREADS

关于python - 阻塞 QThread 阻塞 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033194/

32 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress