我正在学习Python中的多处理方法,并且发现自己有一个问题。请考虑以下示例:
function fixDiv() {
$('.super-image-thumb').css({
'top': $('.sliding-panel-content').scrollTop()+'px'
});
}
$('.sliding-panel-content').scroll(fixDiv);
fixDiv();
这就是我关注的文档使用import multiprocessing as mp
def worker(n):
print('worker %d' % n)
return
if __name__ == '__main__':
jobs = []
for i in range(5):
p = mp.Process(target = worker, args = (i,))
jobs.append(p)
p.start()
的方式。
是否需要用户Process
?我以前从未在Python中看过这种语法,看起来很奇怪。我测试了,这完全相同:
args = (i,)
我有什么理由可以避免这种情况吗?谢谢你的帮助。
答案 0 :(得分:3)
这是一种快速的方式来证明它不是一回事。将您的worker(i)
功能更改为:
import time
def worker(n):
print('worker %d' % n)
time.sleep(1)
return
当你以第一种方式调用它时,你会注意到你仍然可以在开始的同时获得所有5个打印件。当你以第二种方式做到这一点时,你会看到你将所有5个版画交错排列,每个版画之间有一秒钟。
考虑一下你要设置的内容:大约在同一时间启动5个独立进程,每个进程大约在同一时间打印,然后每个进程等待大约一秒钟,但总耗用的时间是只有一秒多一点。这就是你想要发生的事情。
以下是关键点:target = worker
将target
设置为worker
函数,args = (i,)
将args
设置为包含{{{0}的单个元素元组1}}。另一方面,i
调用target = worker(i)
并将worker(i)
设置为函数返回的值,在本例中为target
。当你第二种方式执行时,你根本就没有使用None
。如果你有一个非常耗时的任务,你希望分成多个进程,那么当它以第二种方式完成时,你将看不到任何改进。
基本上,只要你有multiprocessing
,你就会调用函数并获取其返回值,而当你通过func(args)
和{{1}时单独地,您允许func
包发挥其魔力并在独立进程上进行这些函数调用。将目标设置为args
只会调用主进程中的函数,从而首先从多处理中失去任何好处。
答案 1 :(得分:0)
这是为了声明元组变量(没有,它是一个int,一个字符串,一个浮点数......)但不是一个不可变的:
>>> i = 4
>>> k = (i,)
>>> type(k)
<type 'tuple'>
>>> k=(i)
>>> type(k)
<type 'int'>