subprocess.Popen, और संसाधन मॉड्यूल में preexec_fn पैरामीटर का उपयोग करें। उदाहरण:
parent.py:
#!/usr/bin/env python
import os
import sys
import resource
import subprocess
def setlimits():
# Set maximum CPU time to 1 second in child process, after fork() but before exec()
print "Setting resource limit in child (pid %d)" % os.getpid()
resource.setrlimit(resource.RLIMIT_CPU, (1, 1))
print "CPU limit of parent (pid %d)" % os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)
p = subprocess.Popen(["./child.py"], preexec_fn=setlimits)
print "CPU limit of parent (pid %d) after startup of child" % os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)
p.wait()
print "CPU limit of parent (pid %d) after child finished executing" % os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)
child.py:
#!/usr/bin/env python
import os
import sys
import resource
print "CPU limit of child (pid %d)" % os.getpid(), resource.getrlimit(resource.RLIMIT_CPU)
parent.py एक नई प्रक्रिया में फॉर्क होगा। नई प्रक्रिया में, यह setlimits() को कॉल करेगा, फिर निष्पादन child.py। इसका मतलब है कि संसाधन बाल प्रक्रिया में सीमित होगा, लेकिन माता-पिता में नहीं।
आउटपुट जब चल रहे प्रोग्राम:
./parent.py
CPU limit of parent (pid 17404) (-1, -1)
Setting resource limit in child (pid 17405)
CPU limit of parent (pid 17404) after startup of child (-1, -1)
CPU limit of child (pid 17405) (1, 1)
CPU limit of parent (pid 17404) after child finished executing (-1, -1)
यह ulimit उपयोग करने के लिए कोशिश कर रहा से एक बेहतर समाधान कई मामलों में है यह हमेशा एक अच्छा विचार खोल के माध्यम से उपप्रक्रिया अंडे देने के लिए नहीं है के बाद से, खासकर जब से यह अक्सर बदसूरत पैरामीटर का कारण बनता है परेशानी का हवाला देते हुए।
स्रोत
2009-11-06 19:59:22
आप मेरे उत्तर के बजाय उच्चतम वोट वाले उत्तर को स्वीकार करना चाहेंगे। यह मेरी तुलना में काफी बेहतर है। –