首页 文章 精选 留言 我的

精选列表

搜索[Python版本],共10000篇文章
优秀的个人博客,低调大师

python中的线程

1.线程的创建 1.1 通过thread类直接创建 import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) print("bar func:",n) s1=time.time() #创建一个线程实例t1,foo为这个线程要运行的函数 t1=threading.Thread(target=foo,args=(3,)) t1.start() #启动线程t1 #创建一个线程实例t2,bar为这个线程要运行的函数 t2=threading.Thread(target=bar,args=(5,)) t2.start() #启动线程t2 print("ending") s2=time.time() print("cost time:",s2-s1) 在这段程序里,一个函数会先休眠几秒钟,然后再打印一句话,第二个函数也是先休眠几秒钟,然后打印一句话。 接着程序会实例化两个线程,并调用两个函数来执行,最后会打印程序问总共执行了多少时间 程序运行结果如下: ending cost time: 0.002000093460083008 foo func: 3 bar func: 5 程序会先运行父线程,打印"ending",然后打印程序执行父线程的时间,最后才会运行子线程 1.2 通过thread类来继承式创建 import threading import time # 定义MyThread类,其继承自threading.Thread这个父类 class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print("ok") time.sleep(2) print("end t1") # 对类进行实例化 t1=MyThread() # 启动线程 t1.start() print("ending") 2. Thread类的一些常用方法 2.1 join():在子线程完成之前,主线程将一直被阻塞 线程的join方法必须在子线程的start方法之后定义 在第一个例子中加入两行代码,如下: import threading import time def foo(n): time.sleep(n) print("foo func:",n) def bar(n): time.sleep(n) print("bar func:",n) s1=time.time() t1=threading.Thread(target=foo,args=(3,)) t1.start() t2=threading.Thread(target=bar,args=(5,)) t2.start() t1.join() # 阻塞t1线程 t2.join() # 阻塞t2线程 print("ending") s2=time.time() print("cost time:",s2-s1) 再次执行程序,运行结果如下: foo func: 3 bar func: 5 ending cost time: 5.002285957336426 程序运行到子线程t1中的foo方法时会睡眠3秒钟,与此同时,子线程t2也在睡眠 等到子线程t1睡眠完成后,开始打印foo函数中的print语句,然后子线程t1执行完成 2秒钟之后,子线程t2睡眠完成,开始打印bar函数中的print语句,然后子线程t2也执行完成。 而在这之前,主线程一直处于阻塞状态。等到子线程执行完成之后主线程才会执行 2.2 setDeamon(True) setDaemon方法作用是将进程声明为守护线程,必须在`start()`方法调用之前, 如果不设置为守护线程,程序会被无限挂起 在程序执行过程中,执行一个主线程,主线程又创建一个子线程时,主线程和子线程会分别运行。 当主线程运行完成时,会检验子线程是否执行完成,如果子线程执行完成,则主线程会等待子线程完成后再退出。 但是有的时候只要主线程执行完成之后,不管子线程是否执行完成,都和主线程一起退出,这个就需要调用setDeamon方法了。 拿第一个例子来说吧,现在我想让子线程t1和t2随同主线程关闭,代码如下: import threading import time def foo(n): print("foo start") time.sleep(n) print("foo end...") def bar(n): print("bar start") time.sleep(n) print("bar end...") s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) t1.start() t2 = threading.Thread(target=bar, args=(5,)) t2.setDaemon(True) t2.start() print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序运行结果如下 : foo start bar start ending cost time: 0.003000020980834961 可以看到,把t1和t2都声明为守护线程后,程序自上而下执行,先执行子线程t1中的foo方法,打印foo函数中的第一条打印语句,然后子线程t1进入到睡眠状态。 然后子线程t2执行,打印bar函数中的第一条print语句,然后子线程t2进入睡眠状态,程序切换到主线程运行 主线程打印完"ending"语句,发现子线程t1和t2已经被设置为守护线程,所以主线程不需要再等待两个子线程执行完成,而是立即结束,打印整个程序的执行时间。 整个程序就跟随主线程一起关闭了。 2.3 子线程的一些其他方法 isAlive() #判断一个线程是否是活动线程 getName() #返回线程的名字 setName() #设置线程的名字 import threading import time def foo(n): time.sleep(n) print("foo func:", n) def bar(n): time.sleep(n) print("bar func:", n) s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) print("线程还未启动时,判断t1是否是活动的线程:", t1.isAlive()) # 线程还未启动,所以是False t1.start() # 启动线程 print("线程已启动时,判断t1是否是活动的线程:", t1.isAlive()) # 线程已启动,所以是True print("修改前的线程名为:",t1.getName()) # 获取线程名 t1.setName("t1") #设置线程名 print("修改后的线程名为:",t1.getName()) # 获取线程名 t1.join() print("线程执行完成时,判断t1是不否是活动的线程:", t1.isAlive()) # 线程已执行完成,所以是False # print(threading.activeCount()) print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序执行结果: 线程还未启动时,判断t1是否是活动的线程: False 线程已启动时,判断t1是否是活动的线程: True 修改前的线程名为: Thread-1 修改后的线程名为: t1 foo func: 3 线程执行完成时,判断t1是不否是活动的线程: False ending cost time: 3.001171588897705 3.threading模块提供的一些方法 threading.currentThread() #返回当前的线程变量 threading.enumerate() #返回一个包含正在运行的线程的列表,不包括启动前和终止后的线程 threading.activeCount() #返回正在运行的线程数量,等同于len(threading.enumerate()) import threading import time def foo(n): time.sleep(n) print("foo func:", n) def bar(n): time.sleep(n) print("bar func:", n) s1 = time.time() t1 = threading.Thread(target=foo, args=(3,)) t1.setDaemon(True) t1.start() t2 = threading.Thread(target=bar, args=(5,)) t2.setDaemon(True) t2.start() print("程序中正在运行的线程数量:",threading.activeCount()) print("程序中当前的线程变量:",threading.currentThread()) print("当前正在运行的线程的列表:",threading.enumerate()) print("ending") s2 = time.time() print("cost time:", s2 - s1) 程序执行结果: 程序中正在运行的线程数量: 3 程序中当前的线程变量: <_MainThread(MainThread, started 7064)> 当前正在运行的线程的列表: [<_MainThread(MainThread, started 7064)>, <Thread(Thread-1, started daemon 6384)>, <Thread(Thread-2, started daemon 2640)>] ending cost time: 0.002000093460083008

优秀的个人博客,低调大师

python构造IP报文

import socket import sys import time import struct HOST, PORT = "10.60.66.66", 10086 def make_forward_iphdr(source_ip = '1.0.0.1', dest_ip = '2.0.0.2', proto = socket.IPPROTO_UDP) : # ip header fields ip_ihl = 5 ip_ver = 4 ip_tos = 0 ip_tot_len = 0 # kernel will fill the correct total length ip_id = 54321 #Id of this packet ip_frag_off = 0 ip_ttl = 255 ip_proto = proto ip_check = 0 # kernel will fill the correct checksum ip_saddr = socket.inet_aton ( source_ip ) #Spoof the source ip address if you want to ip_daddr = socket.inet_aton ( dest_ip ) ip_ihl_ver = (ip_ver << 4) + ip_ihl # the ! in the pack format string means network order ip_header = struct.pack('!BBHHHBBH4s4s', ip_ihl_ver, ip_tos, ip_tot_len, ip_id, ip_frag_off, ip_ttl, ip_proto, ip_check, ip_saddr, ip_daddr) return ip_header def make_forward_udphdr(src_port = 1024, dst_port = 10086) : udp_header = struct.pack('!HHHH', src_port, dst_port, 0, 0) return udp_header # checksum functions needed for calculation checksum def checksum(msg): s = 0 # loop taking 2 characters at a time for i in range(0, len(msg), 2): w = ord(msg[i]) + (ord(msg[i+1]) << 8 ) s = s + w s = (s>>16) + (s & 0xffff); s = s + (s >> 16); #complement and mask to 4 byte short s = ~s & 0xffff return s def make_tcp_data(ip_header, src_port = 1024, dst_port = 10086, source_ip='1.0.0.1', dest_ip='2.0.0.2', user_data = 'test') : tcp_source = src_port # source port tcp_dest = dst_port # destination port tcp_seq = 454 tcp_ack_seq = 0 tcp_doff = 5 #4 bit field, size of tcp header, 5 * 4 = 20 bytes #tcp flags tcp_fin = 0 tcp_syn = 1 tcp_rst = 0 tcp_psh = 0 tcp_ack = 0 tcp_urg = 0 tcp_window = socket.htons (5840) # maximum allowed window size tcp_check = 0 tcp_urg_ptr = 0 tcp_offset_res = (tcp_doff << 4) + 0 tcp_flags = tcp_fin + (tcp_syn << 1) + (tcp_rst << 2) + (tcp_psh <<3) + (tcp_ack << 4) + (tcp_urg << 5) # the ! in the pack format string means network order tcp_header = struct.pack('!HHLLBBHHH' , tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window, tcp_check, tcp_urg_ptr) source_address = socket.inet_aton(source_ip) dest_address = socket.inet_aton(dest_ip) placeholder = 0 protocol = socket.IPPROTO_TCP tcp_length = len(tcp_header) + len(user_data) psh = struct.pack('!4s4sBBH' , source_address , dest_address , placeholder , protocol , tcp_length); psh = psh + tcp_header + user_data; tcp_check = checksum(psh) #print tcp_checksum # make the tcp header again and fill the correct checksum - remember checksum is NOT in network byte order tcp_header = struct.pack('!HHLLBBH' , tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags, tcp_window) + struct.pack('H' , tcp_check) + struct.pack('!H' ,tcp_urg_ptr) # final full packet - syn packets dont have any data packet = ip_header + tcp_header + user_data return packet

优秀的个人博客,低调大师

[Spark][Python]PageRank 程序

PageRank 程序: file contents: page1 page3 page2 page1 page4 page1 page3 page1 page4 page2 page3 page4 def computeContribs(neighbors,rank): for neighbor in neighbors: yield( neighbor, rank/len(neighbors) ) links = sc.textFile("tst001.txt").map(lambda line: line.split()).map(lambda pages: (pages[0],pages[1]))\ .distinct().groupByKey().persist() ranks=links.map(lambda (page,neighbors): (page,1.0) ) In [4]: for x in range(1): ...: print "links count:"+links.count() ...: print "ranks count:" ranks.count() In [11]: for x in range(3): ....: contribs=links.join(ranks).flatMap( lambda (page,(neighbors,rank)): computeContribs(neighbors,rank) ) ....: ranks=contribs.reduceByKey(lambda v1,v2: v1+v2).map(lambda (page,contrib): (page,contrib*0.85+0.15)) ....: for rank in ranks.collect(): print rank (u'page2', 0.394375) (u'page3', 1.2619062499999998) (u'page4', 0.8820624999999999) (u'page1', 1.4616562499999997) 本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/p/7614711.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

python异常继承树

BaseException + - - SystemExit + - - KeyboardInterrupt + - - GeneratorExit + - - Exception + - - StopIteration + - - StandardError | + - - BufferError | + - - ArithmeticError | | + - - FloatingPointError | | + - - OverflowError | | + - - ZeroDivisionError | + - - AssertionError | + - - AttributeError | + - - EnvironmentError | | + - - IOError | | + - - OSError | | + - - WindowsError (Windows) | | + - - VMSError (VMS) | + - - EOFError | + - - ImportError | + - - LookupError | | + - - IndexError | | + - - KeyError | + - - MemoryError | + - - NameError | | + - - UnboundLocalError | + - - ReferenceError | + - - RuntimeError | | + - - NotImplementedError | + - - SyntaxError | | + - - IndentationError | | + - - TabError | + - - SystemError | + - - TypeError | + - - ValueError | + - - UnicodeError | + - - UnicodeDecodeError | + - - UnicodeEncodeError | + - - UnicodeTranslateError + - - Warning + - - DeprecationWarning + - - PendingDeprecationWarning + - - RuntimeWarning + - - SyntaxWarning + - - UserWarning + - - FutureWarning + - - ImportWarning + - - UnicodeWarning + - - BytesWarning ============================================================================== 本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2011/11/25/2263724.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Python-字典遍历

遇到个小问题: 我将十本书的[书名列表]赋值给字典的title键值,将[作者列表]赋值给‘author’键值。现在想一个书名,一个作者的输出。使用嵌套循环遍历一共得到了10*10=100次书名和作者(笑)。 for ti,au in dic[‘title’],dic[‘author’]: 这是我下意识写出的一行代码,然而不能这样遍历。又改成dic[‘title’,’author’]也不可以,有没有会的兄台可以指点我一下。尝试了如下: f.open(‘f:\book.txt’,’a’) for i in f.readlines: #报错,不可遍历 for ti in dic[‘title’]: 看来只能在Excel中输出了。 2018.1.9 更新: 或者直接再将字典单个键的 value 赋值给一个新list,再通过list遍历。 2018.1.15更新: list1 = [ 1, 2, 3] list2 = ['a','b','c',] d = zip(list1,list2) dic1 = dict(d) for i,j in dic1.items(): print (i,j) 结果图: ​

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册