相关疑难解决方法(0)

Python:为什么functools.partial是必要的?

部分应用很酷.什么功能functools.partial提供你无法通过lambdas?

>>> sum = lambda x, y : x + y
>>> sum(1, 2)
3
>>> incr = lambda y : sum(1, y)
>>> incr(2)
3
>>> def sum2(x, y):
    return x + y

>>> incr2 = functools.partial(sum2, 1)
>>> incr2(4)
5
Run Code Online (Sandbox Code Playgroud)

functools某种程度上更有效,或可读?

python functional-programming partial-application

183
推荐指数
6
解决办法
4万
查看次数

使用硒加载铬延伸

我想要的只是从网上商店加载chrome扩展程序.我做了很多搜索来弄明白,但只知道我们可以从本地机器加载扩展.我真的很想知道selenium是否具有从网上商店或网址加载扩展程序的功能.

请让我知道我正在尝试使用硒?

selenium google-chrome-extension google-chrome-devtools selenium-webdriver

13
推荐指数
4
解决办法
4万
查看次数

python concurrent.futures.ProcessPoolExecutor:.submit()vs .map()的性能

我使用concurrent.futures.ProcessPoolExecutor来查找数字范围内的数字的出现.目的是调查从并发中获得的加速性能的数量.为了测试性能,我有一个控件 - 一个执行所述任务的串行代码(如下所示).我编写了2个并发代码,一个使用concurrent.futures.ProcessPoolExecutor,另一个concurrent.futures.ProcessPoolExecutor.submit()用于执行相同的任务.它们如下所示.关于起草前者和后者的建议可分别在这里这里看到.

发给所有三个代码的任务是在0到1E8的数字范围内找到数字5的出现次数.无论concurrent.futures.ProcessPoolExecutor.map().submit()被指派6名工人,并.map()有10000 CHUNKSIZE.在并发代码中,分离工作负载的方式是相同的.但是,用于在两个代码中查找出现的函数是不同的.这是因为参数传递给.submit()和.map()调用的函数的方式不同.

所有3个代码报告的发生次数相同,即56,953,279次.但是,完成任务所需的时间非常不同..map()执行速度比控制快2倍,同时控制时间.submit()是控制完成任务的两倍.

问题:

  1. 我想知道.map()我的编码是否是一个神器,或者它本身就很慢?"如果是前者,我怎么能改进它.我只是惊讶它表现得比控制慢,因为没有多少激励使用它.
  2. 我想知道是否还有.submit()更快的代码执行.我有一个条件是函数.map()必须返回一个包含数字5的数字/出现次数的iterable.

基准测试结果
基准结果

concurrent.futures.ProcessPoolExecutor.submit()

#!/usr/bin/python3.5
# -*- coding: utf-8 -*-

import concurrent.futures as cf
from time import time
from traceback import print_exc

def _findmatch(nmin, nmax, number):
    '''Function to find the occurrence of number in range nmin to nmax and return
       the found occurrences in a list.'''
    print('\n def _findmatch', …
Run Code Online (Sandbox Code Playgroud)

python concurrency performance python-3.x concurrent.futures

13
推荐指数
2
解决办法
5108
查看次数

Python 中的多处理中的多线程

我正在使用并发.futures 模块来进行多处理和多线程处理。我在具有 16GB RAM、英特尔 i7 第八代处理器的 8 核机器上运行它。我在 Python 3.7.2 甚至 Python 3.8.2 上尝试过这个

import concurrent.futures
import time
Run Code Online (Sandbox Code Playgroud) 获取列表并将每个元素乘以 2
def double_value(x):
  y = []
  for elem in x:
    y.append(2 *elem)
  return y
Run Code Online (Sandbox Code Playgroud) 将 elem 乘以 2
def double_single_value(x):
  return 2* x
Run Code Online (Sandbox Code Playgroud) 定义一个
import numpy as np
a = np.arange(100000000).reshape(100, 1000000)
Run Code Online (Sandbox Code Playgroud) 运行多个线程并将每个 elem 乘以 2 的函数
 def get_double_value(x):
  with concurrent.futures.ThreadPoolExecutor() as executor:
    results = executor.map(double_single_value, x)
  return list(results)
Run Code Online (Sandbox Code Playgroud)

下面显示的代码运行时间为 115 秒。这仅使用多处理。这段代码的CPU利用率是100%

t = time.time()

with concurrent.futures.ProcessPoolExecutor() as executor:
  my_results = …
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing concurrent.futures

9
推荐指数
2
解决办法
8660
查看次数