我有一个处理来自.NET
Remoting的异步回调的Python脚本。这些回调在虚拟(工作)线程中执行。从我的回调处理程序内部,我需要调用在脚本中定义的函数,但需要在主线程中执行该函数。
主线程是将命令发送到服务器的远程客户端。其中一些命令会导致异步回调。
基本上,我需要等效于.NET的Invoke方法。这可能吗?
您想使用Queue(现在是python
3的队列)类来设置一个队列,您的虚拟线程将使用函数填充该队列,而主线程会使用该队列。
import Queue
#somewhere accessible to both:
callback_queue = Queue.Queue()
def from_dummy_thread(func_to_call_from_main_thread):
callback_queue.put(func_to_call_from_main_thread)
def from_main_thread_blocking():
callback = callback_queue.get() #blocks until an item is available
callback()
def from_main_thread_nonblocking():
while True:
try:
callback = callback_queue.get(False) #doesn't block
except Queue.Empty: #raised when queue is empty
break
callback()
演示:
import threading
import time
def print_num(dummyid, n):
print "From %s: %d" % (dummyid, n)
def dummy_run(dummyid):
for i in xrange(5):
from_dummy_thread(lambda: print_num(dummyid, i))
time.sleep(0.5)
threading.Thread(target=dummy_run, args=("a",)).start()
threading.Thread(target=dummy_run, args=("b",)).start()
while True:
from_main_thread_blocking()
印刷品:
From a: 0
From b: 0
From a: 1
From b: 1
From b: 2
From a: 2
From b: 3
From a: 3
From b: 4
From a: 4
然后永远封锁
环境: java21 问题: methods5不会输出log.info的内容, methods6正常打印log.info的内容
问题内容: 如何在Android中从辅助线程调用主线程? 问题答案: 最简单的方法是从线程中调用runOnUiThread(…)
我确信这两个列表都不是空的,并且正在调用,但是没有调用order execution run方法....
我有一个在退出std::线程时执行回调函数的要求,该回调函数应该在主线程上执行。 在创建线程时,我需要分离线程,不能阻止线程完成的主循环执行。 我尝试使用std::signal,但它似乎没有在主线程上执行回调函数
java 都有虚拟线程了,那多线程在加虚拟线程并行岂不无敌
我使用的房间用于存储有关购物车详细信息。 我想删除主线程中的记录。我出错了 无法访问主线程上的数据库,因为它可能会长时间锁定 我检查了下面的链接,但没有帮助我 使用room(rxjava)执行删除 如何在android room和rxjava 2中插入数据并获取id作为out参数? 道阿ccess.java 应用班 我的异步任务正在工作 如何在RxJava中实现这一点。因为我的DAO删除返回无效?