monkeyrunner截图限时免费阅读#2:多线程保存

这是monkeyrunner截图限时免费阅读#1的后作.
之前的脚本中将所有的东西都放在主线程里面执行, 实际上, 保存MonkeyImage到磁盘的过程是IO相当大的, 将这类操作放入单独的线程进行处理能大大提高脚本运行的效率.
我们创建一个线程, 指定一个方法和要传入的参数, 就可以让这个方法在线程中执行, 线程需要是非守护线程, 不过这个是默认的.

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
import sys, os, time, threading

def saveMonkeyImageToFile(img, name):
    '''save monkey img to file'''
    img.writeToFile(name, "png")

def saveMonkeyImageByThread(img, name):
    '''save monkey img to file using thread'''
    t = threading.Thread(target=saveMonkeyImageToFile, args=(img, name,))
    t.start()

if (__name__ == '__main__'):
    PF_PNG = ".png"
    PN_WIDTH = "display.width"
    PN_HEIGHT = "display.height"
    DOWN_AND_UP = "down_and_up"
    TARGET_PATH = os.getcwd() + '/freeder' + str(int(round(time.time()*1000))) + '/'
    os.mkdir(TARGET_PATH)
    print 'create dir: ' + TARGET_PATH
    print 'waiting for connection'
    device = MonkeyRunner.waitForConnection()
    print 'device connected'
    touch_x = int(device.getProperty(PN_WIDTH)) - 10
    touch_y = int(device.getProperty(PN_HEIGHT)) / 2

    page = 1
    if (len(sys.argv) == 2):
        page = int(sys.argv[1])

    old_img = device.takeSnapshot()
    while (True):
        device.touch(touch_x, touch_y, DOWN_AND_UP)
        time.sleep(1)
        new_img = device.takeSnapshot()
        if (new_img.sameAs(old_img)):
            print 'snapshot is same, exit'
            break
        else:
            saveMonkeyImageByThread(old_img, TARGET_PATH + str(page) + PF_PNG)
            print 'write image to file, nameing ' + str(page) + '.png'
            old_img = new_img
            page += 1
    print 'done exit'

脚本的主要改动在于将存储图片的过程变为了新建一个线程去处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值