1.递归 查找当前文件夹下的所有文件(包括子文件夹),名称包含 s 的文件
方法一:
import os
def search(s):
mydict={}
isDirOrFile(os.path.abspath('.'),mydict)
for k,v in mydict.items():
if k.__contains__(s):
print v
def isDirOrFile(path,kw):
if os.path.isdir(path):
for x in os.listdir(path):
result = os.path.join(path, x)
isDirOrFile(result, kw)
elif os.path.isfile(path):
kw.setdefault(path, os.path.abspath(path))
if __name__ == '__main__':
search('File')
方法二:
import os
def search(s, path):
for x in os.listdir(path):
result = os.path.join(path, x)
if os.path.isdir(result):
search(s, result)
else:
if s in x:
print result
if __name__ == '__main__':
start_path = os.path.abspath('.')
search('File', start_path)
2.分布式进程
暂时不太懂,感觉跟java的消息队列很像
这两个代码是:
taskManager 先往队列中放数据,
然后 taskWorker 得到数据,计算,将结果发送到另一个队列
taskManager 就得到了最后的计算结果
先执行这个:
taskManager.py
import random,time,Queue
from multiprocessing.managers import BaseManager
# 发送任务和接受任务的队列
task_queue=Queue.Queue()
result_queue=Queue.Queue()
# 解决windows系统__main__.<lambda> not found问题
def return_task_queue():
return task_queue
def return_result_queue():
return result_queue
class QueueManager(BaseManager):
pass
if __name__ == '__main__':
# 把两个queue 注册到网络上,callback参数关联queue对象
QueueManager.register('get_task_queue',callable=return_task_queue)
QueueManager.register('get_result_queue',callable=return_result_queue)
# 绑定端口,设置验证码
manager=QueueManager(address=('127.0.0.1',5000),authkey='abc')
manager.start()
task=manager.get_task_queue()
result=manager.get_result_queue()
for i in range(10):
n=random.randint(0,10000)
print 'Put task %s ' % n
task.put(n)
print 'Try get results ...'
for i in range(10):
r=result.get(timeout=10)
print 'Result : %s ' % r
manager.shutdown()
再执行这个:
taskWorker.py
import time, sys, Queue
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
# 只需要从网络上获取queue,所以注册时只需要提供名字
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')
server_addr='127.0.0.1'
print 'Connect to %s ' % server_addr
m=QueueManager(address=(server_addr,5000),authkey='abc')
m.connect()
task=m.get_task_queue()
result=m.get_result_queue()
for i in range(10):
try:
n=task.get(timeout=1)
print 'Run task %s * %s ...' % (n,n)
r='%s * %s = %s' % (n,n,n*n)
time.sleep(1)
result.put(r)
except Queue.Empty:
print 'Task queue is empty.'
print 'Worker exit.'