पर विफल रहता है मैंने लिनक्स पर प्रक्रिया समाप्त होने (multiprocessing
लाइब्रेरी) विधि के साथ समस्या को देखा है। मेरे पास multiprocessing
लाइब्रेरी के साथ काम करने वाला एप्लिकेशन है लेकिन ... जब मैं विंडोज पर terminate
फ़ंक्शन को कॉल करता हूं तो सबकुछ बढ़िया काम करता है, दूसरी ओर लिनक्स इस समाधान के साथ विफल रहता है। प्रक्रिया हत्या का एक स्थानापन्न के रूप में मैंमल्टीप्रोसेसिंग प्रक्रिया समाप्त होने पर लिनक्स
os.system('kill -9 {}'.format(pid))
उपयोग करने के लिए मुझे पता है कि यह बहुत स्मार्ट नहीं है मजबूर किया गया था, लेकिन यह काम करता है। तो मैं बस सोच रहा हूं कि यह कोड विंडोज पर क्यों काम करता है, लेकिन लिनक्स पर विफल रहता है।
उदाहरण:
from multiprocessing import Process
import os
process=Process(target=foo,args=('bar',))
pid=process.pid
process.terminate() # works on Windows only
...
os.sytem('kill -9 {}'.format(pid)) # my replacements on Linux
मेरे विन्यास: अजगर 3.2.0 88,445 का निर्माण; लिनक्स-2.6.32-डेबियन-6.0.4
यह मेरे कोड से नमूना है। मुझे उम्मीद है कि यह पर्याप्त होगा।
def start_test(timestamp,current_test_suite,user_ip):
global_test_table[timestamp] = current_test_suite
setattr(global_test_table[timestamp], "user_ip", user_ip)
test_cases = global_test_table[timestamp].test_cases_table
test_cases = test_cases*int(global_test_table[timestamp].count + 1)
global_test_table[timestamp].test_cases_table = test_cases
print(test_cases)
print(global_test_table[timestamp].test_cases_table)
case_num = len(test_cases)
Report.basecounter = Report.casecounter = case_num
setattr(global_test_table[timestamp], "case_num", case_num)
setattr(global_test_table[timestamp], "user_current_test", 0)
try:
dbobj=MySQLdb.connect(*dbconnector)
dbcursor=dbobj.cursor()
dbcursor.execute(sqlquery_insert_progress.format(progress_timestamp = str(timestamp), user_current_test = global_test_table[timestamp].user_current_tes$
except :...
for i in range(case_num):
user_row = global_test_table[timestamp]
current_test_from_tests_table = user_row.test_cases_table[i]
unittest.TextTestRunner(verbosity=2).run(suite(CommonGUI.get_address(CommonGUI,current_test_from_tests_table[1], current_test_from_tests_table[2], user$
global_test_table[timestamp].user_current_test = i + 1
try:
dbobj=MySQLdb.connect(*dbconnector)
dbcursor=dbobj.cursor()
dbcursor.execute(sqlquery_update_progress.format(progress_timestamp = str(timestamp), user_current_test = global_test_table[timestamp].user_current$
except :...
@cherrypy.expose()
def start_test_page(self, **test_suite):
timestamp = str(time.time())
user_ip = cherrypy.request.remote.ip
if on_server():
sys.stdout=sys.stderr=open("/var/log/cherrypy/test_gui/{file}.log".format(file=timestamp),"a")
current_test_suite = self.parse_result(**test_suite)
#global_test_table[timestamp] = current_test_suite
#setattr(global_test_table[timestamp], "user_ip", user_ip)
user_test_process = Process(target=start_test, args=(timestamp,current_test_suite,user_ip))
users_process_table[timestamp] = user_test_process
user_test_process.start()
return '''{"testsuite_id" : "''' + str(timestamp) + '''"}'''
@cherrypy.expose()
def stop_test(self, timestamp):
if timestamp in users_process_table:
if on_server():
user_process_pid = users_process_table[timestamp].pid
os.system("kill -9 " + str(user_process_pid))
else:
users_process_table[timestamp].terminate()
del users_process_table[timestamp]
else:
return "No process exists"
क्या आप अपना अधिक कोड पोस्ट कर सकते हैं? यह जानना सहायक होगा कि फू बार के साथ क्या कर रहा है, और इससे हम शायद बेहतर विचार प्राप्त करेंगे कि लिनक्स क्यों नहीं मार रहा है, लेकिन विंडोज़ है। – parselmouth