python基础

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.'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值