如何同时运行2个函数?

时间:2016-12-22 08:28:01

标签: python python-2.7

我需要同时运行2个功能。

  1. 第一个接收用户输入并将输入保存在列表中的函数
  2. 第二个是每5秒清除一次列表。
  3. 以下是代码:

    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
    

3 个答案:

答案 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