触发另一个函数,直到它完成第一个

时间:2017-04-28 12:54:01

标签: python multithreading

我在stackoverflowgoogle搜索了这么多解决方案,我找不到解决问题的方法。我知道有很多这样的问题,但我没有从这些问题中找到任何解决方案。< / p>

我的问题是:

我在python中编写一个脚本,它将使用threading模块调用两个不同的函数。我需要调用第二个函数,直到第一个函数完成,因为我在第一个函数中下载数据而我必须使用我在第二个函数中使用相同的数据。我将数据以列表的形式存储在一个文件中。

我调用函数的脚本:

def trigger_fiftyusers():
    try:
        for k in range(50):

            # calling first function
            syncUpFun = threading.Thread(target=func1)
            syncUpFun.start()
            syncUpFun.join()

            # calling second function
            syncDownFun = threading.Thread(target=func2)
            syncDownFun.start()
            syncDownFun.join()
except Exception as error:
    print(error)
    print(traceback.format_exc())

例如:

我的第一个功能是:

def func1():
    list1=[]
    print "func1"
    # some code here
    list1.append("some data")
    return list1

我的第二个功能就像:

def func2():
    print "func2"
    # some code here for getting the data from func1
    return list1

,输出应为:

func1
func1
func1
func1

func2
func2
func2
func2

我在Ubuntu 16.04中使用Python 2.7.12

2 个答案:

答案 0 :(得分:1)

我修改了func1,尝试使用这些更改,我认为它会按照您的想法执行。

def func1():
 list1=[]
 print "func1"
 # some code here
 list1.append("some data")
 syncDownFun = threading.Thread(target=func2)
 syncDownFun.start()
 syncDownFun.join()
 return list1

答案 1 :(得分:0)

尝试包装func1和func2,somthine就像:

def trigger_fiftyusers():

    def _wrapper():
        func1()
        func2()

    #Send them all
    threads = []
    for k in range(50):
        t = threading.Thread(target=_wrapper)
        t.start()
        threads.append(t)

    #Wait for all of them
    for t in threads:
        t.join()