我需要同时运行2个功能。
以下是代码:
import time
a = [ ]
for i in range (1,10,1):
x = raw_input(" Enter the Value : ")
a.append(x)
print "List Value : " , a
time.sleep(1)
a[ : ] = [ ]
print " List Value : " , a
答案 0 :(得分:1)
在这种情况下,每个函数需要两个线程,列表需要一个互斥锁以确保互斥。
from threading import Thread, Lock
def getUserData(arg_list):
mutex.acquire()
# handle user data
mutex.release()
def clearList(arg_list):
mutex.acquire()
#clear list
mutex.release()
# In main function
mutex = Lock()
userData = []
t1 = Thread(target = getUserData, args = (userData,))
t2 = Thread(target = clearList, args = (userData,))
t1.start()
t2.start()
while True:
pass
答案 1 :(得分:1)
如果您使用的是macOS或Linux,则可以使用信号 - 这不需要对程序进行大量修改。这是一个更新版本:
import time
import signal
TIMEOUT = 10
a = [ ]
def clear(signum, frame):
global a
a = []
signal.alarm(TIMEOUT)
signal.signal(signal.SIGALRM, clear)
signal.alarm(TIMEOUT)
for i in range (1,10,1):
x = raw_input(" Enter the Value : ")
a.append(x)
print "List Value : " , a
time.sleep(1)
a[ : ] = [ ]
print " List Value : " , a
这里唯一的区别是信号处理程序是通过signal.signal
安装的,每次触发signal.SIGALRM
信号时都会调用它。然后代码调用signal.alarm
以使signal.SIGLARM
在10秒内触发。信号处理程序(clear
)只清除列表,然后安排另一个signal.SIGARLM
信号。
答案 2 :(得分:0)
为了同时运行多个函数,您应该为它们使用不同的线程。在Python中,有两个标准库可以执行此操作:defmodule M do
def main([name, cookie]) do
Node.start String.to_atom(name)
Node.set_cookie String.to_atom(cookie)
IO.inspect {Node.self, Node.get_cookie}
end
end
和$ mix escript.build
$ ./m foo@bar baz
{:foo@bar, :baz}
。 threading
使用multiprocessing
使您能够从线程访问全局共享数据。很容易编码(关于GIL读这个:https://wiki.python.org/moin/GlobalInterpreterLock)。我写了一个使用threading
来解决任务的简单示例。享受:
GIL