小编Jav*_*ier的帖子

切片熊猫系列与元素不在索引中

我有一个由元组索引的熊猫系列,如下所示:

from pandas import Series
s = Series({(0, 0): 1, (0, 1): 2, (0, 3): 3, (1, 0): 1, (1, 2): 4, (3, 0): 5})
Run Code Online (Sandbox Code Playgroud)

我想通过使用也是元组的索引(使用词典排序)来切片这样的系列,但不一定在索引中.当我传递系列中的索引时,切片似乎有效:

s[:(1,0)]
(0, 0)    1
(0, 1)    2
(0, 3)    3
(1, 0)    1
dtype: int64
Run Code Online (Sandbox Code Playgroud)

但如果我尝试通过不在系列上的索引进行切片,则会出现错误:

s[:(1,1)]
...
ValueError: Index(...) must be called with a collection of some kind, 0 was passed
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望得到由(0,0),(0,1),(0,3),(1,0)索引的系列元素,类似于在TimeSeries中使用日期切片时发生的情况.有没有一种简单的方法来实现这一目标?

python series slice pandas

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

Flask-Restful中的abort方法忽略CORS选项

我有一个配置了一些CORS选项的Flask-Restful API:

api = Api()
api.decorators=[cors.crossdomain(origin='*', headers=['accept', 'Content-Type'])]

...

api.init_app(app)
Run Code Online (Sandbox Code Playgroud)

POST如果请求中的数据无效,我的API接受可能失败的请求:

class myAPI(Resource):
    def post(self):
        args = request.get_json()
        if args.get('something'):
            return {'message': 'Request worked, data received!',
                    'something': args['something']}
        else:
            abort(500, "Error: Data must contain a 'something' field!")
Run Code Online (Sandbox Code Playgroud)

当我成功POST请求我的API时,我可以看到CORS选项已正确设置:

...
* upload completely sent off: 81 out of 81 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: application/json
< Content-Length: 205
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: HEAD, GET, POST, OPTIONS
< Access-Control-Max-Age: …
Run Code Online (Sandbox Code Playgroud)

python rest abort cors flask

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

在python进程中创建和重用对象

我有一个令人尴尬的可并行化的问题,包括一堆彼此独立解决的任务.解决每个任务是相当漫长的,因此这是多处理的主要候选者.

问题是解决我的任务需要创建一个非常耗时的特定对象,但可以重用于所有任务(想想需要启动的外部二进制程序),所以在串行版本中我做了一些事情像这样:

def costly_function(task, my_object):
    solution = solve_task_using_my_object
    return solution

def solve_problem():
    my_object = create_costly_object()
    tasks = get_list_of_tasks()
    all_solutions = [costly_function(task, my_object) for task in tasks]
    return all_solutions
Run Code Online (Sandbox Code Playgroud)

当我尝试使用多处理并行化该程序时,my_object由于多种原因(它不能被腌制,并且它不应该同时运行多个任务)而不能作为参数传递,所以我不得不求助于创建一个每个任务的单独对象实例:

def costly_function(task):
    my_object = create_costly_object()
    solution = solve_task_using_my_object
    return solution

def psolve_problem():
    pool = multiprocessing.Pool()
    tasks = get_list_of_tasks()
    all_solutions = pool.map_async(costly_function, tasks)
    return all_solutions.get()
Run Code Online (Sandbox Code Playgroud)

但是创建多个实例的额外成本my_object使得此代码仅略微快于序列化代码.

如果我可以my_object在每个进程中创建一个单独的实例,然后将其重用于在该进程中运行的所有任务,那么我的时间将显着提高.有关如何做到这一点的任何指示?

python pool multiprocessing

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

标签 统计

python ×3

abort ×1

cors ×1

flask ×1

multiprocessing ×1

pandas ×1

pool ×1

rest ×1

series ×1

slice ×1