[英]PHP hangs when call Python script that use multiprocess/multithreading
我已經編寫了一個PHP代碼來調用Python腳本,如下所示:
<?php
system("tmn", $return_value);
echo $return_value;
?>
以下是Python腳本。
#!/usr/bin/env python
import os
from subprocess import Popen
devnull = open(os.devnull, 'wb')
p = [] # ip -> process
for n in range(1, 20): # start ping processes
ip = "172.28.83.%d" % n
p.append((ip, Popen(['ping', '-c', '1', '-w', '1', ip], stdout=devnull)))
#NOTE: you could set stderr=subprocess.STDOUT to ignore stderr also
while p:
for i, (ip, proc) in enumerate(p[:]):
if proc.poll() is not None: # ping finished
p.remove((ip, proc)) # this makes it O(n**2)
if proc.returncode == 0:
print('%s active' % ip)
elif proc.returncode == 2:
print('%s no response' % ip)
else:
print('%s error' % ip)
devnull.close()
但是,當我使用瀏覽器加載php頁面時,該頁面將永遠加載, 看來PHP卡在了system
或exec
調用中。 我嘗試使用其他Python腳本,但是只要腳本是並行的(使用Multiproccessing或Multithreading),肯定會發生此問題。
最奇怪的是,此問題僅發生在我的Linux服務器之一(CentOS 6.5)上。
$php -v
PHP 5.5.7 (cli) (built: Jan 3 2014 11:19:10)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
python --version
Python 2.7.6
我整天為此壓着頭。 如果您提出任何建議,那將是巨大的幫助。
這可能是很不合理的,但是解決“僅在centos上發生的怪異問題”的經驗法則是“您是否嘗試禁用selinux?”
也許您應該嘗試禁用它( http://www.cyberciti.biz/faq/howto-turn-off-selinux/ ),然后重新啟動並重試您的代碼。 如果它可以工作,您將學會在所有系統上禁用selinux,或者您將經歷一次極好的冒險,試圖了解selinux的工作原理,在這種情況下,祝您好運並帶來大量的阿司匹林。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.