博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重新学习python系列(四)? WTF?
阅读量:5100 次
发布时间:2019-06-13

本文共 3156 字,大约阅读时间需要 10 分钟。

多进程:

fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),

然后,分别在父进程和子进程内返回

getppid()得到父进程的ID
getpid() 得到当前进程的ID

# multiprocessing.pyimport osprint 'Process (%s) start...' % os.getpid()pid = os.fork()if pid==0:    print 'I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid())else:    print 'I (%s) just created a child process (%s).' % (os.getpid(), pid)Process (876) start...I (876) just created a child process (877).I am child process (877) and my parent is 876.

 

 

进程之间的通信:

from multiprocessing import Process, Queueimport os, time, random# 写数据进程执行的代码:def write(q):    for value in ['A', 'B', 'C']:        print 'Put %s to queue...' % value        q.put(value)        time.sleep(random.random())# 读数据进程执行的代码:def read(q):    while True:        value = q.get(True)        print 'Get %s from queue.' % valueif __name__=='__main__':    # 父进程创建Queue,并传给各个子进程:    q = Queue()    pw = Process(target=write, args=(q,))    pr = Process(target=read, args=(q,))    # 启动子进程pw,写入:    pw.start()    # 启动子进程pr,读取:    pr.start()    # 等待pw结束:    pw.join()    # pr进程里是死循环,无法等待其结束,只能强行终止:    pr.terminate()

 

 

多线程:

Python的标准库提供了两个模块:threadthreadingthread是低级模块,threading是高级模块,对thread进行了封装。

绝大多数情况下,我们只需要使用threading这个高级模块。

启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:

#coding=utf-8import time, threading# 新线程执行的代码:def loop():    print 'thread %s is running...' % threading.current_thread().name    n = 0    while n < 5:        n = n + 1        print 'thread %s >>> %s' % (threading.current_thread().name, n)        time.sleep(1)    print 'thread %s ended.' % threading.current_thread().nameprint 'thread %s is running...' % threading.current_thread().namet = threading.Thread(target=loop, name='LoopThread')t.start()t.join()print 'thread %s ended.' % threading.current_thread().name

 。。。。。。。

 

 

collections模块提供了一些有用的集合类,可以根据需要选用。

defaultdict

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

#coding=utf-8from collections import defaultdictdd = defaultdict(lambda: 'N/A')dd['a'] = 123print dd['a']print dd['b']

OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

如果要保持Key的顺序,可以用OrderedDict

OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

。。。。。。。。。。。。。。

 

base64

>>> base64.b64encode('i\xb7\x1d\xfb\xef\xff')'abcd++//'>>> base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')'abcd--__'>>> base64.urlsafe_b64decode('abcd--__')'i\xb7\x1d\xfb\xef\xff'

 

python计数器Count 

# -*- coding:utf-8 -*-"""  python计数器Counter  需导入模块collections"""import collections # 统计各个字符出现的次数,以字典形式返回obj = collections.Counter('adfsdfsdfswrwerwegfhgfhgh')print obj# elements => 原生的传入的值('adfsdfsdfswrwerwegfhgfhgh')for v in obj.elements():    print v # 按参数给定的个数返回print obj.most_common(4)

 # 执行结果显示 Counter({

'f': 5, 'd': 3, 'g': 3, 'h': 3, 's': 3, 'w': 3, 'e': 2, 'r': 2, 'a': 1}) [('f', 5), ('d', 3), ('g', 3), ('h', 3)]

 

 

请写一个能处理 去掉=的base64解码函数:

import base64text = 'YWJjZA'if not len(text)%4==0:    print base64.b64decode(text+"="*(len(text)%4))

 

structpack函数把任意数据类型变成字符串:

>>> import struct>>> struct.pack('>I', 10240099)'\x00\x9c@c'

 unpackstr变成相应的数据类型:

>>> struct.unpack('>IH', '\xf0\xf0\xf0\xf0\x80\x80')(4042322160, 32896)

 

转载于:https://www.cnblogs.com/amliaw4/p/6985194.html

你可能感兴趣的文章
我需要在电脑上安装C编译器
查看>>
oracle一次删除多张表
查看>>
H3C 配置CHAP验证
查看>>
H3C ICMP
查看>>
Python Numpy 介绍
查看>>
element对象
查看>>
Android SQLite (一) 数据库简介
查看>>
HashMap和HashSet的区别
查看>>
python-2:基础点滴 字符串函数之一 str
查看>>
5th 13.10.21数组求和 求最大数
查看>>
jenkins multijob 插件使用
查看>>
[HEOI2013]SAO(树上dp,计数)
查看>>
设计模式-策略模式
查看>>
批处理(.bat脚本)基本命令语法
查看>>
编写多进程编程
查看>>
[UOJ#454][UER#8]打雪仗
查看>>
常用机器学习算法
查看>>
js event 2
查看>>
poj 3468 A Simple Problem with Integers(线段树)
查看>>
Redis实现之客户端
查看>>