python⼀个⽂件⾥⾯多个函数同时执⾏(多线程的⽅法,并
发)--多线程threading
--------------------------第⼀种: 主线程和 n个线程同时启动,主线程执⾏完了,所有线程都结束
#coding=utf-8
import time
from selenium import webdriver
import threading
def fun1(a):
  print a
一个线程可以包含多个进程def fun2():
  print 222
threads = []
threads.append(threading.Thread(target=fun1,args=(u'爱情买卖',)))  #args为函数接受的参数,多个参数可以传⼊多个 args=(u'爱情买
卖',u'爱情买卖')
threads.append(threading.Thread(target=fun2))
print(threads)
if __name__ == '__main__':
  for t in threads:
    t.setDaemon(True) #我拿来做selenium⾃动化模拟多个⽤户使⽤浏览器的时候,加了这个就启动不了,要去掉,原因到了 :  加了这个是说明主线程执⾏完了⼦线程也停⽌(⽆论是否执⾏完毕)
    t.start()
print "all over %s" %ctime()
代码说明:
import threading
⾸先导⼊threading 模块,这是使⽤多线程的前提。
threads = []
t1 = threading.Thread(target=fun1,args=(u'爱情买卖',))
threads.append(t1)
创建了threads数组,创建线程t1,使⽤threading.Thread()⽅法,在这个⽅法中调⽤music⽅法target=music,args⽅法对music进⾏传参。把创建好的线程t1装到threads数组中。
接着以同样的⽅式创建线程t2,并把t2也装到threads数组。
for t in threads:
  t.setDaemon(True)      #加了这个只要主线程⾛完了,⼦线程⽆论有没执⾏完都⼀起停⽌。可以加这个,然后主线程那⾥写个判断外部txt⽂件的值,⼿动改为1就执⾏完毕,所有线程都停⽌了
  t.start()
最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
setDaemon()
setDaemon(True)将线程声明为守护线程,必须在start() ⽅法调⽤之前设置,如果不设置为守护线程程序会被⽆限挂起。⼦线程启动后,⽗线程也继续执⾏下去,当⽗线程执⾏完最后⼀条语句print "all over %s" %ctime()后,没有等待⼦线程,直接就退出了,同时⼦线程也⼀同结束。
start()
开始线程活动。
从执⾏结果来看,⼦线程(muisc 、move )和主线程(print "all over %s" %ctime())都是同⼀时间启动,但由于主线程执⾏完结束,所以
导致⼦线程也终⽌。
-----------------------------第⼆种,要等待所有⼦线程都执⾏完毕,主线程才执⾏完毕脚本才停⽌:
if __name__ == '__main__':
for t in threads:
t.setDaemon(True)
t.start()
t.join()
print "all over %s" %ctime()
我们只对上⾯的程序加了个join()⽅法,⽤于等待线程终⽌。join()的作⽤是,在⼦线程完成运⾏之前,这个⼦线程的⽗线程将⼀直被阻塞。
注意: join()⽅法的位置是在for循环外的,也就是说必须等待for循环⾥的两个进程都结束后,才去执⾏主进程。
后记:
搞了个并发浏览器操作,
如果要做参数化,⽤ddt会导致所有⾏为都在⼀个浏览器操作,去掉ddt框架后,并发正常(这⾥可能是把dirver 定义成全局变量导致的问题!!!!! 去掉后正常)
threading库知识点补充:
参考:
⾍师那个seleniumpdf⾥⾯还有其他⽅法可以参考
中⽂⽂档:
另外⼀篇 thread 库的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。