python学习笔记(1)----并发与IO

来源:互联网 发布:飞鱼网络电视1.3.9 编辑:程序博客网 时间:2024/06/03 13:14

今天本来是想写个爬虫,结果发现对python非常生疏,于是自学了点东西,解决了点小麻烦,在此总结下:


1.   if __name== '__main__': main() 的含义:

比如写了一个PY文件,但是在其他文件中也想引用,这时就可以在文件中设置这一行,代表如果执行这个文件则运行main(),如果在其他文件中引用这个文件则不执行


2.下面是一些多线程,多进程并发的总结。虽然这是第一次用python写并行,但是之前学过操作系统和linux下C语言的并发编程,所以对它还是有一些了解的,鉴于LZ使用的是MAC OS X,所以程序在WINDOWS下不知道能不能运行。

需要引入的有:


import osimport time,threadingfrom multiprocessing import Pool,Process



A:  fork()创建多进程:

import os
pid = os.fork()if pid==0:    print 'child'else:    print 'parent'
子进程中fork()返回的pid的值为0,如果想获取自己的pid,使用os.getpid(), 如果想获取父进程的pid,使用os.getppid(),父进程中返回的pid为子进程的PID而非自己的。


B:multiprocessing模块:

def test(a):    global mm    print 'qqq%s'%a    time.sleep(10)    mm = mm+1    print mm    print 'ok%s'%amm = 0   p = [0,1,2,3,4,5,6,7,8,9]for i in range(10):    time.sleep(1)    p[i] = Process(target=test,args=(i,))    p[i].start()print 'get'for j in range(10):    p[j].join()    pass#p[0].join()print os.getpid()

使用Process创建进程后自动执行target的函数,p.join()表示父进程只有在p这个进程执行完后才继续,如果要等所有进程执行完,则要对所有子进程使用join()

C:进程池:

def test(a):    print ap = Pool()for i in range(2):    p.apply_async(test,(i,))p.close()print 'xxx'p.join()

使用Pool()创建进程池,apply创建子进程。close表示当子进程全部运行完成后关闭进程池,join表示进程池关闭后下面的代码才会执行。

注意:close之后的print代码不会等到关闭后才执行,只有执行到join时主进程才阻滞。


D:多线程:多线程和多进程B方法相似只是把Process改成threading.Thread即可


3. 文件IO

A:读文件read(),readline(),readlines()

使用with open('a.txt', 'r') as f : 打开文件且能自动关闭,使用f.read(size)读取全部或固定大小的文件,使用readlines()读取全部行并且按行存入list中,对于大文件使用

with open('a.txt', 'r') as f :    #print f.readlines()    print '\n'    '''    for line in f.readlines():        print line.strip()    '''    line = f.readline()    while line:        print line.strip()        line = f.readline() 


 

0 0
原创粉丝点击