I have looked around and do not see a solution for this. What I would like to do is get a list of all packages available in Python at run-time.
I looked at these:
But they are not what I am looking for.
I attempted to do this:
import pkgutil
for pkg in pkgutil.walk_packages():
print(pkg) # or …Run Code Online (Sandbox Code Playgroud) 我解决了我的问题,通过移动
mySubQThreadrun()到myQThreadrun()也就是说,我仍然想知道为什么我之前尝试的方法不起作用。
我对线程很陌生。我遇到了这个问题,我想我可能正在处理错误的事情,无论如何。我对不同的方法持开放态度,我知道这可能有点令人费解。
我有一个 GUI 可以创建一个新的派生QThread让我们myQThread在该线程中调用它,我正在运行一个创建另一个线程的进程,调用它mySubQThread我遇到的问题如下,例如,我在 GUI 中定义了信号:signalA = QtCore.Signal(int)和一个插槽in 中myQThread的插槽mySubQThread似乎从未收到信号。
这是一个工作示例。(稍作修改)
from PySide import QtCore, QtGui
import time
class myQThread(QtCore.QThread):
myThreadSignal = QtCore.Signal(int)
def __init__(self, parent):
super(myQThread, self).__init__(parent=parent)
def run(self):
self.subThread = mySubQThread(parent=self)
self.myThreadSignal.connect(self.subThread.sub_thread_slot)
self.myThreadSignal.connect(self.test_slot)
print "starting subthread..."
self.subThread.start()
while self.subThread.isRunning():
print "myQThread is alive!"
time.sleep(1)
print "myQThread exiting run..."
@QtCore.Slot(int)
def my_thread_slot(self, a):
print "1b) Made it here!"
self.myThreadSignal.emit(a)
@QtCore.Slot(int)
def …Run Code Online (Sandbox Code Playgroud) 我想知道如何暂停 QThread,然后在收到信号时恢复。我已阅读并知道我可以做这样的事情:
def run(self):
...
self.ready=False
while not self.ready:
self.sleep(1)
...
...
@QtCore.Slot()
def set_ready(self):
self.ready = True
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是避免线程中的轮询。我不想将睡眠时间设置得很短并继续检查。我想睡觉,直到我从主线程收到继续的信号。
我在我的线程中正在做的是这样的:
(pseudo code)
with open file:
read a block of data
while data:
sendThread = send the block via UDP
read the next block of data
while not ready or sendThread.isRunning:
sleep(0.1)
Run Code Online (Sandbox Code Playgroud)
在我的主线程中,我设置了一个QtNetwork.QUdpSocket将readyRead连接到一个方法来处理传入的数据报并对其进行解码。当它收到我正在等待的响应时,它会向插槽发送一个信号,set_ready告诉线程发送另一个数据报。我并不总是知道其他系统需要多长时间才能响应,尽管我可能会有 30 秒左右的较长超时值。
有没有办法中断线程的睡眠?所以我可以做这样的事情:
sleep(30)
if not ready:
Timeout occurred stop processing
else:
Continue processing.
Run Code Online (Sandbox Code Playgroud)