如何让Python多进程安全退出

最近在做访问日志处理方面的工作,需要对日志进行实时处理,由于需要处理的文件量比较大,所以考虑使用并行处理。在并行处理方面,Python有两个模块,threadingmultiprocessing,分别用于多线程和多进程。通过实际测试发现,多进程在并行处理方面(尤其是计算量大时)的表现明显优于多线程。具体原因可以参考Python文档里的描述:

In CPython, due to the Global Interpreter Lock, only one thread can execute Python code at once (even though certain performance-oriented libraries might overcome this limitation). If you want your application to make better use of the computational resources of multi-core machines, you are advised to use multiprocessing. However, threading is still an appropriate model if you want to run multiple I/O-bound tasks simultaneously.

关于使用Python的多进程时如何安全退出的问题,可以使用如下方式:

以上代码的工作原理是,程序接收外部信号(Ctrl-C或kill),然后将退出标志设置为True。对于子进程来说,它在处理完一次任务(即循环结束)后,通过判读这个退出标志来结束进程。而对于主进程则忽略这个信号,而是等所有子进程退出后才结束进程。

参考资料:
http://blog.csdn.net/linvo/article/details/7700257

Nginx如何防止通过IP直接访问

在Nginx中,如果希望阻止通过IP地址直接访问Web服务器,可以通过添加以下server配置的方法:

其中,
1.default_server是指定此server为默认服务器。
2.””用来匹配请求头中无Host字段的情况。
3._用来匹配任何域名或IP。
4.localhost用来匹配本机,其可有可无。
5.444是Nginx的非标准返回码,用来关闭连接。

参考资料:
[1] http://nginx.org/en/docs/http/server_names.html
[2] http://nginx.org/en/docs/http/request_processing.html