Asynchronous 在tornado中,threadpoolexecutor线程安全吗?
在tornado中,我们可以使用ThreadPoolExecutor异步执行调用,但ThreadPoolExecutor或@run_on_executor是线程安全的? 如果答案是否定的,如何解决资源共享问题Asynchronous 在tornado中,threadpoolexecutor线程安全吗?,asynchronous,tornado,Asynchronous,Tornado,在tornado中,我们可以使用ThreadPoolExecutor异步执行调用,但ThreadPoolExecutor或@run_on_executor是线程安全的? 如果答案是否定的,如何解决资源共享问题 ThreadPoolExecutor线程安全吗 ThreadPoolExecutor是安全的,只要代码是安全的。它所做的只是在多个线程中运行代码。最终,让代码线程安全完全取决于您 如何解决资源共享问题 通过不共享资源。无论何时,只要您需要对资源执行任何操作,都可以调用主线程并在那里执行
ThreadPoolExecutor
线程安全吗
ThreadPoolExecutor
是安全的,只要代码是安全的。它所做的只是在多个线程中运行代码。最终,让代码线程安全完全取决于您
如何解决资源共享问题 通过不共享资源。无论何时,只要您需要对资源执行任何操作,都可以调用主线程并在那里执行 在Tornado中,您可以使用将控件提交回主线程。因此,您可以在
ThreadPoolExecutor
中运行代码,但只要您想对资源执行任何操作,就可以将控制权提交回主线程
例如:
x=1
def print_x():
全球x
如果x==1:
打印x
x+=1
如您所见,上面的代码不是线程安全的,因为每个线程都可以修改x
要以线程安全的方式运行它,必须在主线程中执行条件检查并修改x。也就是说,您必须仅在主线程中运行print_x
函数,如下所示:
x=1
def print_x():
#仅在主线程中运行,以确保线程安全
全球x
如果x==1:
打印x
x+=1
def调用_print_x():
#这可以在任何线程中运行
#它要求主线程运行“print_x”`
loop=ioloop.ioloop.current()
loop.add_callback(print_x)#将控件提交到主线程
ThreadPoolExecutor
线程安全吗
ThreadPoolExecutor
是安全的,只要代码是安全的。它所做的只是在多个线程中运行代码。最终,让代码线程安全完全取决于您
如何解决资源共享问题 通过不共享资源。无论何时,只要您需要对资源执行任何操作,都可以调用主线程并在那里执行 在Tornado中,您可以使用将控件提交回主线程。因此,您可以在
ThreadPoolExecutor
中运行代码,但只要您想对资源执行任何操作,就可以将控制权提交回主线程
例如:
x=1
def print_x():
全球x
如果x==1:
打印x
x+=1
如您所见,上面的代码不是线程安全的,因为每个线程都可以修改x
要以线程安全的方式运行它,必须在主线程中执行条件检查并修改x。也就是说,您必须仅在主线程中运行print_x
函数,如下所示:
x=1
def print_x():
#仅在主线程中运行,以确保线程安全
全球x
如果x==1:
打印x
x+=1
def调用_print_x():
#这可以在任何线程中运行
#它要求主线程运行“print_x”`
loop=ioloop.ioloop.current()
loop.add_callback(print_x)#将控件提交到主线程
如果loop.add\u回调使响应变慢?@shaidiren否。线程之间的切换非常快。我的意思是,我认为一微秒的延迟并不重要,是吗?如果loop.add_回调使响应变慢了?@shaidiren No。线程之间的切换相当快。我是说,我认为一微秒的延迟都不重要,是吗?