开发者社区> 问答> 正文

如何运行函数在永远循环?

我想永远循环我的函数。但我正在挣扎。

import os
import requests
import glob
import time 
import base64

url = 'http://0.0.0.0:5000/'

def load_data():

    os.chdir('./40_mb')
    for image in glob.glob('*.jpg'):
        with open(image, 'rb') as imageFile:
            # image_s = base64.b64encode(imageFile.read())
            image_s = {'file_image':open(image, 'rb')}

    return image_s

def send_data():


    start = time.time()
    r = requests.post(url, files = load_data())
    end = time.time()

    print('client 1: {} ms'.format((end - start)*1000))



if __name__ == "__main__":
    while True:
        send_data()

当我运行它,我得到这个错误:

Traceback (most recent call last):
  File "http_1.py", line 32, in <module>
    send_data()
  File "http_1.py", line 23, in send_data
    r = requests.post(url, files = load_data())
  File "http_1.py", line 11, in load_data
    os.chdir('./40_mb')
FileNotFoundError: [Errno 2] No such file or directory: './40_mb'

没有while True,我的代码运行良好。有人能帮我解决这个问题吗?如果这是个愚蠢的问题,我很抱歉。谢谢提前 问题来源StackOverflow 地址:/questions/59387115/how-to-run-function-in-forever-loop

展开
收起
kun坤 2019-12-25 21:43:26 344 0
1 条回答
写回答
取消 提交回答
  • 在while循环中,似乎没有重定向到正确的目录。要解决这个问题,您需要将工作目录更改为最初的起始位置。一个真正干净和方便的方法是在上下文管理器中使用它,只是为了更干净、更可重用的代码。

    import os
    import os
    import requests
    import glob
    import time 
    import base64
    from contextlib import contextmanager
    
    
    @contextmanger
    def workingdir(path):
        try:
           origin = os.getcwd()
           os.chdir(path)
           yield
        except:
           print('error occured') #might be better to logging the error instead of a just a print statement
        finally:
            os.chdir(origin)
    
    url = 'http://0.0.0.0:5000/'
    
    def load_data():
    
        with workingdir(path):
            for image in glob.glob('*.jpg'):
                with open(image, 'rb') as imageFile:
                    # image_s = base64.b64encode(imageFile.read())
                    image_s = {'file_image':open(image, 'rb')}
    
            return image_s
    
    def send_data():
    
    
        start = time.time()
        r = requests.post(url, files = load_data())
        end = time.time()
    
        print('client 1: {} ms'.format((end - start)*1000))
    
    
    
    if __name__ == "__main__":
        while True:
            send_data()
    

    这样,每次while循环运行时,它都会直接返回它开始的目录。

    2019-12-25 21:43:39
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载