小编Max*_*her的帖子

python在永无止境的进程上运行覆盖

我有一个多处理的Web服务器,其流程永无止境,我想在实时环境中检查整个项目的代码覆盖率(不仅仅是测试).

问题是,由于进程永远不会结束,我没有一个设置cov.start() cov.stop() cov.save()钩子的好地方.

因此,我想到产生一个线程,在无限循环中将保存并组合覆盖数据然后休眠一段时间,但是这种方法不起作用,覆盖报告似乎是空的,除了睡眠线.

我很乐意收到有关如何获取我的代码的任何想法,或任何关于为什么我的想法不起作用的建议.这是我的代码片段:

import coverage
cov = coverage.Coverage()
import time
import threading
import os

class CoverageThread(threading.Thread):
    _kill_now = False
    _sleep_time = 2

@classmethod
def exit_gracefully(cls):
    cls._kill_now = True

def sleep_some_time(self):
    time.sleep(CoverageThread._sleep_time)

def run(self):
    while True:
        cov.start()
        self.sleep_some_time()
        cov.stop()
        if os.path.exists('.coverage'):
            cov.combine()
        cov.save()
        if self._kill_now:
            break
    cov.stop()
    if os.path.exists('.coverage'):
        cov.combine()
    cov.save()
    cov.html_report(directory="coverage_report_data.html")
    print "End of the program. I was killed gracefully :)"
Run Code Online (Sandbox Code Playgroud)

python multithreading coverage.py python-multiprocessing

17
推荐指数
1
解决办法
1445
查看次数

日期时间 - 凌晨3:00开始新的一天

我有一个分析某个网站上用户行为的代码,它使用了许多DateTime功能.现在,我想开始新的一天,3:00 am而不是12:00 am默认情况下,但我真的不想改变代码的任何其他部分.

例如:说我DateTime喜欢2014-08-27t02:59:00和我一样AddMinutes(2),日期应该改为2014-08-28t03:01:00.

有没有办法在不改变其他功能的情况下设置"新的开始"?

c# datetime

5
推荐指数
1
解决办法
272
查看次数

Python pandas.DataFrame.from_csv

该任务是一个非常简单的数据分析,我使用api下载报告,它作为csv文件.我一直在尝试使用以下代码将其正确转换为DataFrame:

@staticmethod
    def convert_csv_to_data_frame(csv_buffer_file):
        data = StringIO(csv_buffer_file)
        dataframe = DataFrame.from_csv(path=data, index_col=0)
        return dataframe
Run Code Online (Sandbox Code Playgroud)

但是,由于csv中没有索引,因此数据帧忽略了我需要的第一列数据,因为它被认为是索引列.我想知道是否有办法让数据框自动插入索引列.

python dataframe pandas

3
推荐指数
1
解决办法
1930
查看次数

drf 如何避免 UniqueValidator 中的 objects.all()

我有一个代表用户的序列化程序类。

class UserSerializer(BaseSerializer):
    uid = serializers.IntegerField(required=True)

    class Meta:
        model = User
        fields = "all"

    def validate(self, data):
        super().validate(data)
        validate_user_data(data=self.initial_data, user=self.instance)
        return data
Run Code Online (Sandbox Code Playgroud)

用户在 uid 上应该是唯一的,所以当收到 post 请求时,我真正想要的是将 uid 字段更改为:

    uid = serializers.IntegerField(required=True, validators=[validators.UniqueValidator(queryset=User.objects.all())])
Run Code Online (Sandbox Code Playgroud)

这可能会起作用,问题是,这将触发一个 sql 查询,该查询将选择所有用户。这可能会对系统产生非常大的影响,因为它们可能有数以万计。我真正想要的是将查询更改为User.objects.get(uid=uid),这不会从数据库中选择每个用户。但是,因为我在 uid 的序列化程序定义中,所以我不能使用 uid=uid 因为 uid 刚刚被定义。

django django-models python-3.x django-rest-framework

1
推荐指数
1
解决办法
463
查看次数