我们要的是一个可读的字符串,因此os.urandom这种是不靠谱的。
[python]
#生成一个Population
pop = [chr(i) for i in xrange(33, 126 + 1)]
#sample随机选取,然后再Join
print "".join(random.sample(pop, 64))
[/python][......]
我们要的是一个可读的字符串,因此os.urandom这种是不靠谱的。
[python]
#生成一个Population
pop = [chr(i) for i in xrange(33, 126 + 1)]
#sample随机选取,然后再Join
print "".join(random.sample(pop, 64))
[/python][......]
Sqlite3的数据库,在删除数据时并不会回收空间,因此Sqlite3提供了一个特殊操作:VACUUM,调用它,我们可以压缩数据库。
当然,在Python中压缩也是非常简单的。
[python]
def compact_sqlite3_db():
try:
conn = sqlite3.connect(SQLITE_FILE)
conn.execute("VACUUM")
conn.close()[......]
#设a为字符串
import time
a = "2011-09-28 10:00:00"
#中间过程,一般都需要将字符串转化为时间数组
time.strptime(a,'%Y-%m-%d %H:%M:%S')
>>time.struct_time(tm_year=2011, tm_mon=9, tm_mday=27, tm_hour=10, tm_min=50, tm_sec=0, tm_wday=1, tm_yday=270, tm_isdst=-1)
#将"[......]
真的是内牛满面啊,虽然4个月前就开始用gevent,但是直到今天才知道到底怎么才能设置gevent(含monkey打patch后)的超时!!
官方文档太坑爹了,在很隐藏的一个角落里才发现这么一个类gevent.Timeout。
事情是这样的:我们常用的socket都是阻塞的,那么超时是很好设置的。但是,用过Linux下非阻塞I/O的都知道,非阻塞情况下,设置连接超时神马都是浮云的,因为人家是非阻塞的……
于是,当我们用monkey.patch_all()之后,所有的socket[......]
理论上讲,Python是不存在线程安全问题的,由于GIT么,但是这是有前提的:sleep,I/O导致的wait都可能会引发线程安全隐患。
同理,gevent是基于事件驱动模型的,就不太可能是线程安全的。
gevent.coros.Semaphore提供了信号量的功能,可以是n个哦!
semaphore.acquire() -> 获取“锁”
semaphore.release() -> 释放“锁”
gevent的文档写的真简介啊,于是测试了个基本的同步方法:同[......]