小编dab*_*aba的帖子

synchronized vs ReentrantLock vs AtomicInteger执行时间

我可以看到,ReentrantLock快于50%左右synchronized,并AtomicInteger快100%.为什么这三种同步方法的执行时间存在差异:synchronizedReentrantLockAtomicInteger(或Atomic包中的任何类).

除了这些之外还有其他流行的和扩展的同步方法吗?

java concurrency multithreading synchronization mutex

5
推荐指数
2
解决办法
2840
查看次数

Python按属性排序,可以是None

假设我有一个我要排序的项目列表:items = [ item1, item2, item3 ].我想用来对它们进行排序的属性是item.data.value,所以我通常会去:

sorted(items, key=attrgetter('data.value'))
Run Code Online (Sandbox Code Playgroud)

那工作得很好.但是,data实际上None显然我无法访问value.

你通常如何处理这样的场景?

PS:这个问题这个问题都没有帮助.

python sorting python-2.7

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

Python:对列表中的特定元素进行排序

我有一个我想要排序的元素列表,但我不想对所有这些元素进行排序,只有那些具有特定状态的元素.例如,假设我有一个peole列表:

lst = [Mary, John, Anna, Peter, Laura, Lisa, Steve]
Run Code Online (Sandbox Code Playgroud)

我们中的一些人有工作,比方说[Anna, Lisa, Steve].我希望按照它们工作的小时数对它们进行排序(升序)并将它们移动到列表的开头,同时保持其余的顺序完全相同.那么让我们说他们工作的小时数如下:

Anna.job.hours   # 10
Lisa.job.hours   # 5
Steve.job.hours  # 8
Run Code Online (Sandbox Code Playgroud)

部分排序后,列表将如下所示:

[Lisa, Steve, Anna, Mary, John, Peter, Laura]
Run Code Online (Sandbox Code Playgroud)

当然,我可以创建两个原始列表中的新列表,对我想要排序的列表进行排序,然后将它们组合在一起以实现我的目标:

with_job = [person for person in lst if person.job]
without_job = [person for person in lst if not person.job]

with_job.sort(key=lambda p: p.job.hours)

lst = with_job + without_job
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有一种方法式的Pythonic方法.

python sorting python-2.7

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

Django:将数据从 CBV 表单视图传递到表单 CBV

我有Formwith a ModelChoiceField,它被用作form_classa 中的the FormView

选择字段必须填充与request对象绑定的信息。

我们总结一下:

class MyFormView(FormView):
    # I need to pass `request.user` and a value 
    # derived from `request.GET['pk']` to the form
    form_class = MyForm

class MyForm(Form):
    choices = ModelChoiceField(queryset=MyChoice.objects.none())

    def __init__(self, user, number, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['choices'] = MyChoice.objects(number=number, owner=user)
Run Code Online (Sandbox Code Playgroud)

创建实例时,我需要做什么才能将该数据传递到表单?

我尝试覆盖,get_form但我不确定这是执行此操作的正确方法:

 def get_form(self, form_class):
        user = self.request.user
        number = SomeModel.objects.get(self.GET['pk']).number
        return form_class(user, number, **self.get_form_kwargs())
Run Code Online (Sandbox Code Playgroud)

django

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

Django:datetime按日期忽略时间过滤

我正在尝试过滤Match某天计划的es。我不能只是这样做:

match_queryset.filter(start=date)
Run Code Online (Sandbox Code Playgroud)

因为它也会按时间过滤,但是我可以这样做:

match_queryset.filter(start__year=a_date.year, start__month=a_date.month, start__day=a_date.day)
Run Code Online (Sandbox Code Playgroud)

但这太复杂了,我觉得可能有一种更简单的方法。

然后,我还可以使用范围:

t0 = datetime.datetime.combine(a_date, datetime.time(0, 0))
t1 = datetime.datetime.combine(a_date, datetime.time(23, 59, 59))
match_queryset.filter(start__gte=t0, start__lte=t1)
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个过大的选择,并且可能会生成效率低下的查询。

我不能只是查询以实际日期为目标吗?就像是:

# this of course doesn't work
match_queryset.filter(start__date=date)
Run Code Online (Sandbox Code Playgroud)

无需说我已经尝试寻找解决方案,但找不到任何解决方案。

python django

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

Django 1.8 测试问题:ProgrammingError: 关系“auth_user”不存在

我最近将 Django 升级到 1.8 并设置了一个新的开发数据库以重新开始。迁移和依赖关系进展顺利,避免了您遇到的常见错误,最终解决了。该应用程序现在在本地运行良好。

但是,在尝试运行测试时出现错误:

python manage.py test
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

django.db.utils.ProgrammingError: relation "auth_user" does not exist
Run Code Online (Sandbox Code Playgroud)

不用说,Django 的 auth 模块确实是在应用程序中安装和迁移的,所以我不确定这是怎么回事。

这是完整的堆栈跟踪,以防您需要查看它,但它并没有说明任何对我找出此错误原因有帮助的内容:

Traceback (most recent call last):
  File "C:/Users/dabadaba/PycharmProjects/dogpatchsports_com/mysite/manage_sched_dev.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 354, in execute_from_command_line
    utility.execute()
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\__init__.py", line 346, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 30, in run_from_argv
    super(Command, self).run_from_argv(argv)
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 394, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\commands\test.py", line 74, in execute
    super(Command, self).execute(*args, **options)
  File "C:\Users\dabadaba\Envs\django18\lib\site-packages\django\core\management\base.py", line 445, in execute
    output = …
Run Code Online (Sandbox Code Playgroud)

python migration django django-1.8

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

使用Django进行测试:停留在测试数据库的创建上

我在为我的应用程序运行测试时遇到了一些麻烦,并且在上一篇文章中设法解决了这些问题。

现在执行的python manage.py test过程不会引起任何错误,但是它会卡在数据库创建中:

如我在pgAdmin中所见,当测试数据库不存在时,它确实会创建,但是它被此消息卡在进程中:

Creating test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

它永远都停留在这里,因此当我手动完成该过程并test再次运行时,它说数据库存在,并提示我删除它并重新创建或取消该过程。我键入“是”,并且该过程再次被其他消息卡住:

Destroying old test database 'default'...
Run Code Online (Sandbox Code Playgroud)

使用pgAdmin打开时,我无法立即看到任何新test_dbname数据库,但是如果我关闭并再次打开它,就test_dbname可以了,但是test任务只是卡在那儿,无法进行...

解决此问题的方法是此解决方案,即禁用迁移。这样,它就不再卡在这些消息上,并且运行默认测试。

.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Run Code Online (Sandbox Code Playgroud)

但是,这似乎是一个不好的解决方案和作弊手段。运行测试时一定有充分的理由要运行迁移,所以我看不出禁用它们的充分理由。

python migration django django-1.8

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

在不同测试类之间共享数据

对于需要在特定模块中测试的每个不同组件,我都有一个专用的测试类。所有这些测试都围绕相同的对象/上下文,因此如果没有创建相应的对象并将其插入测试数据库,然后为每个测试类删除,则可以提高性能:

class ContextTest(TestCase):
    fixtures = [...]

    @classmethod
    def setUpTestData(cls):
        pass

# executes setUpTestData
class Component1Test(ContextTest):
    pass

# executes setUpTestData again
class Component2Test(ContextTest):
    pass
Run Code Online (Sandbox Code Playgroud)

有什么方法可以确保setUpTestData只运行一次,同时为了清楚起见将我的测试保留在不同的类下?

python testing django django-1.8

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

Django django.db.backends 记录器和调试

我正在尝试分析部分代码以减少针对数据库运行的查询数量,因此我配置了以下记录器,该记录器据称会记录针对数据库执行的每个原始 SQL 查询:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在逐行调试所述代码块,以慢慢检查正在记录的查询。问题在于 PyCharm 的调试器正在评估所涉及的QuerySets,因此对数据库运行查询并扭曲了我的分析。

有什么方法可以配置调试器,使其不会自动评估变量吗?或者本质上我可以通过任何其他方式分析每行代码产生的原始查询?

python django debugging logging django-1.8

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

AtomicInteger不会同时增加

我正在测试该类的使用,AtomicInteger但增量似乎并未在互斥控制下应用.

这是我的测试:

static class AtomicIntegerRunnable implements Runnable
{
    private static AtomicInteger x;

    AtomicIntegerRunnable() {}

    AtomicIntegerRunnable(AtomicInteger x) 
    {
        this.x = x;
    }

    @Override
    public void run()
    {
        System.out.println(x.get());
        x.getAndIncrement();
    }
}

public static void main(String[] args) {
    ExecutorService e = Executors.newFixedThreadPool(n_whatever);
    AtomicInteger x = new AtomicInteger();
    int n = 10;
    for (int i=0; i<n; i++) {
        e.submit(new AtomicIntegerRunnable(x));
            }
    e.shutdown();
    while (!e.isTerminated());
}
Run Code Online (Sandbox Code Playgroud)

在印刷品中,我得到了类似的东西

0 0 1 1 1 5 4 3 2 6

代替

0 1 2 3 …

java concurrency multithreading

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