Python修炼,并行编程(三)<2016.4.26>
admin
2023-07-30 20:47:56
0

今天主要写三个东西,一个是并行编程里面的Lock,另外两个是字符串处理的小任务

  • 先说Lock

    如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。
    使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间。如下:
    多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。
    考虑这样一种情况:一个列表里所有元素都是0,线程\”set\”从后向前把所有元素改成1,而线程\”print\”负责从前往后读取列表并打印。
    那么,可能线程\”set\”开始改的时候,线程\”print\”便来打印列表了,输出就成了一半0一半1,这就是数据的不同步。为了避免这种情况,引入了锁的概念。
    锁有两种状态——锁定和未锁定。每当一个线程比如\”set\”要访问共享数据时,必须先获得锁定;如果已经有别的线程比如\”print\”获得锁定了,那么就让线程\”set\”暂停,也就是同步阻塞;等到线程\”print\”访问完毕,释放锁以后,再让线程\”set\”继续。
    经过这样的处理,打印列表时要么全部输出0,要么全部输出1,不会再出现一半0一半1的尴尬场面。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import threading
import time
class myThread (threading.Thread):
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        print \"Starting \" + self.name
       # 获得锁,成功获得锁定后返回True
       # 可选的timeout参数不填时将一直阻塞直到获得锁定
       # 否则超时后将返回False
        threadLock.acquire()
        print_time(self.name, self.counter, 3)
        # 释放锁
        threadLock.release()
def print_time(threadName, delay, counter):
    while counter:
        time.sleep(delay)
        print \"%s: %s\" % (threadName, time.ctime(time.time()))
        counter -= 1
threadLock = threading.Lock()
threads = []
# 创建新线程
thread1 = myThread(1, \"Thread-1\", 1)
thread2 = myThread(2, \"Thread-2\", 2)
# 开启新线程
thread1.start()
thread2.start()
# 添加线程到线程列表
threads.append(thread1)
threads.append(thread2)
# 等待所有线程完成
for t in threads:
    t.join()
print \"Exiting Main Thread\"
  • 一道算法题

    对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1。
    样例


    Paste_Image.png

    然后这个我想了两种解法,其实是一种方法,只是判断边界条件的方式不一样。一会儿测试一下哪一种速度快。

  • 先贴第一个
    思路是先判断边界条件,利用双层for循环,逐步后移判断是否相等,如果target循环完还是相等就会返回相应的res,否则就会返回-1。

    class Solution:
      def strStr(self, source, target):
          # write your code here
          if source == None or target == None or len(source)

    *然后我又写了一个很傻的方法,很不幸没有通过,就是我想用re的search去判断边界条件,没有成功

    import re
    class Solution:
      def strStr(self, source, target):
          # write your code here
          if source ==None or target == None or len(source)0:
              for i in range(len(source)-len(target)+1):
                  flag = True
                  res = i
                  for char in target:
                      if char == source[i]:
                          i +=1
                      else:
                          flag = False
                  if flag:
                      return res
          return -1
  • 随机生成十个用户名和密码,并把密码做加密处理

import random
import hashlib
n=8
z=0
while z<10:
    z=z+1
    charactor=\'qwertyuiopasdfghjklzxcvbnm0123456789\'
    a=[0]*n
    b=[0]*n
    for i in xrange(n):
        a[i]=charactor[random.randint(0,len(charactor)-1)]
        b[i]=charactor[random.randint(0,len(charactor)-1)]
    name=\'\'.join(a)
    password=\'\'.join(b)
    password_md5=hashlib.md5(password).hexdigest()

    print name
    print password
    print password_md5
    x = open(\'user.txt\',\'a\')
    x.write(name+\'\\n\'+str(password_md5)+\'\\n\')
    x.close()

—————–

  • 处理下面一段数据
\"ID\",\"linenum\",\"fstation\",\"lstation\",\"linelong\",\"co\",\"kongtiao\",\"yuepiao\",\"piaozhi\",\"pay\",\"ftime\",\"ltime\",\"station\"
43,\"1(马官营-四惠站)\",\"马官营\",\"四惠站\",\"22.00\",\"客六\",\"否\",\"有效\",\"单一票制\",\"1.00\",\"5:00\",\"23:00\",\"1 马官营 

2 六里桥北里 

3 公主坟南站 

4 公主坟 

5 军事博物馆 

6 木樨地 

7 工会大楼 

8 礼士路 

9 复兴门 

10 西单 

11 中山公园 

12 天安门 

13 东单 

14 北京站口 

15 日坛路 

16 永安里 

17 大北窑 

18 郎家园 

19 八王坟 

20 四惠站 
\"

把它的信息做个简单处理:

import codecs
import re
beijing = codecs.open(\"beijing_jt.csv\",\"r\",\"utf-8\")
f = beijing.readlines()
s_tmp = \"\".join(f[1:40])
s_split = s_tmp.split(\',\')
print s_split[1]
s_split_split=s_split[-1].split(\'\\r\\n \\r\\n\')
pattern = (r\'(?P\\d+)\\s(?P\\D+)\')
for tmp in re.findall(pattern,s_split[-1]):
    print tmp[0],tmp[1]

会变成下面的样子


Paste_Image.png

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...