python线程函数传参 python多线程参数传递

Python 多线程传参问题

下面是从python  threading模块摘录下来的

10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有太平免费网站建设让你可以放心的选择与我们合作。

class threading.Thread(group=None, target=None,

name=None, args=(), kwargs={})

args is the argument tuple for the target invocation. Defaults to

().

kwargs is a dictionary of keyword arguments for the target

invocation. Defaults to {}.

简单的说就是,线程函数的参数要么是tuple类型要么是dict类型,既然python文档上已经规定好了,那么就是不能变了,除非重大的版本升级,弃用现在这种方式,不过这是不可能的,再者可以查看threading.Thread类的初始化代码

class Thread(_Verbose):    

def __init__(self, group=None, target=None, name=None,

args=(), kwargs=None, verbose=None):

assert group is None, "group argument must be None for now"

_Verbose.__init__(self, verbose)

if kwargs is None:

kwargs = {}

self.__target = target

self.__name = str(name or _newname())

self.__args = args

self.__kwargs = kwargs

self.__daemonic = self._set_daemon()

self.__ident = None

self.__started = Event()

self.__stopped = False

self.__block = Condition(Lock())

self.__initialized = True

# sys.stderr is not stored in the class like

# sys.exc_info since it can be changed between instances

self.__stderr = _sys.stderr

看到上面的args和kwargs的赋值情况吗,你不能像**kwargs这样来传参的。

从上面来看,你要使用多线程你就必须遵守这个约定,线程函数参数要么是tuple,要么是字典,没办法改进。非要改进那就是使用全局变量,不用传参,但是如果是这样的话会涉及到线程安全的问题或者叫数据同步问题,如果不加锁或者其他互斥量的话这个问题会很严重。所以还是遵守规定吧

python多线程thread.start_new_thread传参的问题

因为thread.start_new_thread(ssh_cmd,(3,))开的线程会和主线程一起结束,所以等不到执行print number 程序就结束了

python 像这样定义多线程的类在调用时怎么把调用父类的参数传递给子函数

你已经实现了啊。在__init__初始化参数里,将参数传递进去。

另外因为线程工作在主程序同一个空间里,所以可以用全局变量传递。比如定义一个global v,然后在主程序里设置好。

再在线程里用global v来引用。

如果在线程运行当中,动态的改参数。可以象是这里的thread_stop设置。由主进程与从进程单对单的传递信号。

另外还可以通过队列。这个好处是有一个锁,可以全局使用。

此外你还可以引入一个消息管理器。各个线程与主进程直接通过消息传递变量。

进程之间也可以通过共享内存来实现RPC通信,就是交换数据。

线程处理完的数据,如果主程序想处理。可以这样。让线程通过全局变量,通过队列传回来。

不过主进程通常还有一个任务,就是监督线程的完成退处,并管理线程中止信号。

比如你这个程序少了一个

thread.join() 这里的join可以加一个timeout,当超时时,主进程就可以脱身出来,做一些其它的事情,比如处理返回数值。 如果线程通过一个数组变量将状态传回主进程。这样轮洵子线程状态会比join的效率更高。

你这个程序里用文件传递也不是不可以。这是一个很好思路。当你传递变量困难时,可以用文件。或者是数据库。


网页名称:python线程函数传参 python多线程参数传递
链接地址:http://pwwzsj.com/article/doepcdi.html