python调用大漠多线程_python之系统编程 --线程

###########使用线程完成多任务################

from threading importThreadimporttime#1. 如果多个线程执行的都是同一个函数的话,各自之间不会有影响,各是个的

deftest():print("----昨晚喝多了,下次少喝点---")

time.sleep(1)for i in range(5):

t= Thread(target=test)

t.start()

#############使用类的方式创建线程完成任务###########

importthreadingimporttimeclassMyThread(threading.Thread):defrun(self):for i in range(3):

time.sleep(1)

msg= "I'm"+self.name+'@'+str(i) #name属性中保存的是当前线程的名字

print(msg)if __name__ == '__main__':

t=MyThread()

t.start()

执行结果:

[root@master process]#python3 09-thread.py

I'm Thread-1 @ 0

I'm Thread-1 @ 1

I'm Thread-1 @ 2

###############线程之间共享全局变量#########

from threading importThreadimporttime#线程之间共享全局变量

g_num = 100

defwork1():globalg_numfor i in range(3):

g_num+= 1

print("----in work1, g_num is %d---"%g_num)defwork2():globalg_numprint("----in work2, g_num is %d---"%g_num)print("---线程创建之前g_num is %d---"%g_num)

t1= Thread(target=work1)

t1.start()#延时一会,保证t1线程中的事情做完

time.sleep(1)

t2= Thread(target=work2)

t2.start()

############线程之间共享全局变量带来的问题############

from threading importThreadimporttime

g_num=0deftest1():globalg_numfor i in range(1000000):

g_num+= 1

print("---test1---g_num=%d"%g_num)deftest2():globalg_numfor i in range(1000000):

g_num+= 1

print("---test2---g_num=%d"%g_num)

p1= Thread(target=test1)

p1.start()#time.sleep(3) #取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?

p2= Thread(target=test2)

p2.start()print("---g_num=%d---"%g_num)

############把列表当做参数传递给线程############

from threading importThreadimporttimedefwork1(nums):

nums.append(44)print("----in work1---",nums)defwork2(nums):#延时一会,保证t1线程中的事情做完

time.sleep(1)print("----in work2---",nums)

g_nums= [11,22,33]

t1= Thread(target=work1, args=(g_nums,))

t1.start()

t2= Thread(target=work2, args=(g_nums,))

t2.start()

###############避免多线程对共享数据出错的方式###########

from threading importThreadimporttime

g_num=0

g_flag= 1

deftest1():globalg_numglobalg_flagif g_flag == 1:for i in range(1000000):

g_num+= 1g_flag=0print("---test1---g_num=%d"%g_num)deftest2():globalg_num#轮询

whileTrue:if g_flag != 1:for i in range(1000000):

g_num+= 1

break

print("---test2---g_num=%d"%g_num)

p1= Thread(target=test1)

p1.start()#time.sleep(3) #取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?

p2= Thread(target=test2)

p2.start()print("---g_num=%d---"%g_num)

##############使用互斥锁解决共享数据出错问题##################

代码例子:

from threading importThread, Lockimporttime

g_num=0deftest1():globalg_num#这个线程和test2线程都在抢着 对这个锁 进行上锁,如果有1方成功的上锁,那么导致另外

#一方会堵塞(一直等待)到这个锁被解开为止

mutex.acquire()for i in range(1000000):

g_num+= 1mutex.release()#用来对mutex指向的这个锁 进行解锁,,,只要开了锁,那么接下来会让所有因为

#这个锁 被上了锁 而堵塞的线程 进行抢着上锁

print("---test1---g_num=%d"%g_num)deftest2():globalg_num

mutex.acquire()for i in range(1000000):

g_num+= 1mutex.release()print("---test2---g_num=%d"%g_num)#创建一把互斥锁,这个锁默认是没有上锁的

mutex =Lock()

p1= Thread(target=test1)

p1.start()#time.sleep(3) #取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?

p2= Thread(target=test2)

p2.start()print("---g_num=%d---"%g_num)

#############多线程使用非共享变量################

from threading importThreadimportthreadingimporttimedeftest1():#注意:

#1. 全局变量在多个线程中 共享,为了保证正确运行需要锁

#2. 非全局变量在每个线程中 各有一份,不会共享,当然了不需要加锁

name =threading.current_thread().nameprint("----thread name is %s ----"%name)

g_num= 100

if name == "Thread-1":

g_num+= 1

else:

time.sleep(2)print("--thread is %s----g_num=%d"%(name,g_num))#def test2():#time.sleep(1)#g_num = 100#print("---test2---g_num=%d"%g_num)

p1= Thread(target=test1)

p1.start()

p2= Thread(target=test1)

p2.start()

执行结果:

###################同步#################

同步的应用:

from threading importThread,Lockfrom time importsleepclassTask1(Thread):defrun(self):whileTrue:iflock1.acquire():print("------Task 1 -----")

sleep(0.5)

lock2.release()classTask2(Thread):defrun(self):whileTrue:iflock2.acquire():print("------Task 2 -----")

sleep(0.5)

lock3.release()classTask3(Thread):defrun(self):whileTrue:iflock3.acquire():print("------Task 3 -----")

sleep(0.5)

lock1.release()#使用Lock创建出的锁默认没有“锁上”

lock1 =Lock()#创建另外一把锁,并且“锁上”

lock2 =Lock()

lock2.acquire()#创建另外一把锁,并且“锁上”

lock3 =Lock()

lock3.acquire()

t1=Task1()

t2=Task2()

t3=Task3()

t1.start()

t2.start()

t3.start()

############生产者与消费者##########

#encoding=utf-8

importthreadingimporttime#python2中#from Queue import Queue

#python3中

from queue importQueueclassProducer(threading.Thread):defrun(self):globalqueue

count=0whileTrue:if queue.qsize() < 1000:for i in range(100):

count= count +1msg= '生成产品'+str(count)

queue.put(msg)print(msg)

time.sleep(0.5)classConsumer(threading.Thread):defrun(self):globalqueuewhileTrue:if queue.qsize() > 100:for i in range(3):

msg= self.name + '消费了'+queue.get()print(msg)

time.sleep(1)if __name__ == '__main__':

queue=Queue()for i in range(500):

queue.put('初始产品'+str(i))for i in range(2):

p=Producer()

p.start()for i in range(5):

c=Consumer()

c.start()

#########TheadLocal###############

Theadlocal的作用:不用传参数,用一个全局变量能够完成线程里面所有的数据传递,不会因为下一个线程调用该变量而改变该值

importthreading#创建全局ThreadLocal对象:

local_school =threading.local()defprocess_student():#获取当前线程关联的student:

std =local_school.studentprint('Hello, %s (in %s)' %(std, threading.current_thread().name))defprocess_thread(name):#绑定ThreadLocal的student:

local_school.student =name

process_student()

t1= threading.Thread(target= process_thread, args=('dongGe',), name='Thread-A')

t2= threading.Thread(target= process_thread, args=('老王',), name='Thread-B')

t1.start()

t2.start()

############异步的实现######################

from multiprocessing importPoolimporttimeimportosdeftest():print("---进程池中的进程---pid=%d,ppid=%d--"%(os.getpid(),os.getppid()))for i in range(3):print("----%d---"%i)

time.sleep(1)return "hahah"

deftest2(args):print("---callback func--pid=%d"%os.getpid())print("---callback func--args=%s"%args)

pool= Pool(3)

pool.apply_async(func=test,callback=test2)#异步的理解:主进程正在做某件事情,突然 来了一件更需要立刻去做的事情,#那么这种,在父进程去做某件事情的时候 并不知道是什么时候去做,的模式 就称为异步

whileTrue:

time.sleep(1)print("----主进程-pid=%d----"%os.getpid())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文字方面 1. 所有文字识别接口都支持后台gdi 后台gdi2 后台dx 后台dx2 后台dx3 以及前台normal 2. 支持RGB HSV颜色识别 3. 支持RGB HSV差色识别 4. 支持多种颜色混合识别(最多10种) 5. 支持连体字识别 6. 支持背景色识别 7. 支持点阵模糊识别(防杂点干扰) 8. 支持查找指定字符串在屏幕的坐标 9. 支持查找指定字符串在屏幕上的所有坐标 10. 支持在未知文字的情况下进行词组识别 11. 支持在没有字库的情况下,进行词组范围识别 12. 支持多字库,最多10个字库。方便针对不同的情况制作字库. 13. 完全兼容91OCR字库(txt字库,mdb不支持) 14. 支持字库自定义加密解密 15. 支持识别指定图片中的文字 16. 支持在代码中添加字库 图色方面 1. 所有图色接口都支持后台gdi 后台gdi2 后台dx 后台dx2 后台dx3 以及前台normal 2. 支持颜色查找,多种颜色查找,并可指定搜索的方向以及相似度 3. 支持图形查找,多个图形查找,并可指定搜索的方向以及相似度 4. 支持直接获取某点的颜色(RGB,HSV) 5. 支持直接对某点的颜色进行比较,可指定相似度 6. 可直接对任意区域进行截图,并保存为bmp(24位色) 7. 可获取某范围的RGB和HSV颜色均值 8. 支持图片透明色 9. 支持多图查找 10. 支持直接获取图像数组,方便二次开发 11. 支持多点找色 键鼠方面 1. 所有键鼠接口都支持windows消息模拟,dx以及前台 2. 前台完全模拟,功能和按键自带的完全一样 3. 后台windows消息模拟(类似于按键自带的后台键鼠) 4. dx键盘几乎支持所有游戏后台组合键.(首创) 5. 后台dx (首创,支持大型的3D以及2D游戏键鼠的模拟) 后台方面 1. 两个函数,搞定前后台的切换,非常简单快捷. 窗口方面 1. 支持任意绘制的信息提示窗口,可以随着游戏窗口的移动而移动 2. 信息提示窗口可以鼠标拖动,更加方便快捷 3. 支持获取通过正常手段获取不到的窗口句柄,比如QQ系列游戏 4. 支持枚举窗口 5. 支持获取窗口各种状态 6. 支持对窗口进行各种操作,关闭,最小化等等 内存方面 1. 支持CE格式的内存读取 2. 支持各种数据类型的搜索,以及多次搜索(类似CE) 3. 强力内存接口,按键自带的读不到,可以试试这个 4. 强力的内存写接口(简单游版本不支持) 汇编方面 汇编方面(简单游版本不支持) 支持MASM语法的汇编语句,支持本进程以及目标进程的汇编代码嵌入执行(俗语Call) 2. 支持机器码和MASM语句的互转 答题器 1. 支持前后台的截图发送到服务端 2. 支持前后台的截取动画发送到服务端 5颜色格式 编辑 颜色格式 1.RGB模式 RRGGBB-偏色RR偏色GG偏色BB适用于颜色偏差较大的场合 2.HSV模式 H.S.V-偏色H.偏色S.偏色V 适用于颜色接近的场合 例如,RGB模式: 9f2e3f-000000 表示颜色为9f2e3f,RGB的偏色都为0 9f2e3f-020202 表示颜色为9f2e3f,RGB的偏色都为02 HSV模式: 20.30.20-0.0.0 表示颜色为20.30.20,HSV的偏色都为0 20.30.20-0.0.20 表示颜色为20.30.20,HSV的偏色为0 0 20 6工具部分 编辑 字库制作工具的使用,主要分为2大功能模块 1. 一个是抓图,制作自定义字库,任意形状都可以 2. 第二个是根据系统中的字体,来制作字库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值