使用线程再次调用main函数?

时间:2016-06-14 15:29:22

标签: python-3.x python-multithreading

我真的试图在实际应用中围绕线程概念的概念。我在 python 3.4 中使用Threading模块,我不确定逻辑是否适合程序功能。

以下是我的代码的要点:

def myMain():
 """ my main function actually uses sockets to 
     send data over a network
 """
# there will be an infinite loop call it loop-1 here
while True:
        #perform encoding scheme
        #send data out... with all other exception handling


       # here is infinite loop 2 which waits for messages
       # from other devices
       while True:
             # Check for incoming messages
             callCheckFunction() ----> Should I call this on a thread?

上面提到的callCheckFunction()将对收到的数据进行一些比较,如果数据值不匹配,我想再次运行myMain()函数。

以下是callCheckFunction()

的要点
def callCheckFunction():
       if data == 'same':
          # some work done here and then get out
          # function and return back to listening on the socket
       else data == 'not same':
           myMain() ---------> Should I thread this one too??

这可能很复杂,但我不确定线程是否是我想要的东西。我通过调用上面提到的myMain()函数做了一个讨厌的黑客,它很棒!但我认为在函数中调用函数肯定会有一些限制,我希望我的代码有点专业而不是Hacky!

我的想法设置在线程,因为当一些新数据进入整个myMain() 时,我以无限方式收听套接字回来创造一种我想要控制的繁忙的递归。

修改

所以我设法使代码更加模块化,即我将两个无限循环分成两个不同的函数

现在myMain分为

  • task1()

  • task2()

,要点如下:

def task1():
    while True:
       # encoding and sending data

       #in the end I call task2() since it the primary
       # state which decides things
       task2() ---------> still need to decide if I should thread or not

 def task2():
    while True:
          # check for incoming messages

          checker = threading.Thread(callCheckFunction, daemon=True)
          checker.start()
          checker.join()

现在由于callCheckFunction()需要func1(),我决定注意 func1() 线程 func1实际上是代码的main()

def callCheckFunction():
      else data == 'not same':
           thready = threading.Thread(func1, daemon= True)
           thready.start()
           thready.join()

结果

我很少理解我设法使代码正常工作。但我不确定这是真的 hacky 还是一种专业的做事方式!我可以通过GitHub和系统的有限状态机共享代码。此外,我不确定此代码是否线程安全!但真的需要帮助/建议

0 个答案:

没有答案