Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不应该';t我使用异步(事件)IO_Python_Asynchronous_Libevent_Gevent - Fatal编程技术网

Python 为什么不应该';t我使用异步(事件)IO

Python 为什么不应该';t我使用异步(事件)IO,python,asynchronous,libevent,gevent,Python,Asynchronous,Libevent,Gevent,我现在正在编写一些事件代码(使用gevent在python中编写),我使用nginx作为web服务器,我觉得两者都很棒。有人告诉我,有一个权衡的事件,但无法看到它。谁能帮我弄点光吗 James最大的问题是,如果没有线程,一个客户端的阻塞将导致所有客户端的阻塞。例如,如果一个客户端请求一个需要操作系统阻止请求进程的资源(磁盘上的文件、分页内存等),那么所有客户端都必须等待。多线程服务器可以只阻塞一个客户机并继续为其他客户机提供服务 也就是说,如果上述情况不太可能发生(即,所有客户端都将请求相同的资

我现在正在编写一些事件代码(使用gevent在python中编写),我使用nginx作为web服务器,我觉得两者都很棒。有人告诉我,有一个权衡的事件,但无法看到它。谁能帮我弄点光吗


James最大的问题是,如果没有线程,一个客户端的阻塞将导致所有客户端的阻塞。例如,如果一个客户端请求一个需要操作系统阻止请求进程的资源(磁盘上的文件、分页内存等),那么所有客户端都必须等待。多线程服务器可以只阻塞一个客户机并继续为其他客户机提供服务


也就是说,如果上述情况不太可能发生(即,所有客户端都将请求相同的资源),那么事件驱动是一条可行之路。

事件编程的唯一困难是永远不能阻塞。如果您使用一些设计时考虑了线程的库,那么这可能很难实现。如果您不能控制这些库,则可以使用fork()+消息ipc。

为什么不可以?(你没有提供支持或反对的论据。)我想知道取舍是什么……缓存一致性?代码复杂性?线程处理?您没有提到的是,您可以以非阻塞方式访问所需的资源。这样,您就不会阻塞,可以继续应答客户机,并在资源准备就绪时从事件系统获得回调,所有这些都在一个线程中完成。其次,基于事件的代码的思想是对所有内容使用异步接口:无同步I/O。尽管使用python,即使使用gevent、twisted,如果你不小心的话,很容易意外地使用一些阻塞呼叫。顺便说一句,这是每个人在谈论线程与事件时引用的页面:@cce:如果c10k不够,我们可以尝试c500k: